From 76effcf10dac45a208e71b57f8c222341865168c Mon Sep 17 00:00:00 2001 From: michael Date: Sat, 2 May 2020 15:57:45 +0000 Subject: [PATCH] * Merging revisions 45223 from trunk: ------------------------------------------------------------------------ r45223 | michael | 2020-05-02 17:56:30 +0200 (Sat, 02 May 2020) | 1 line * Explicitly raise EDivError (bug ID 36839) ------------------------------------------------------------------------ git-svn-id: branches/fixes_3_2@45224 - --- packages/fcl-base/src/fpexprpars.pp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/fcl-base/src/fpexprpars.pp b/packages/fcl-base/src/fpexprpars.pp index adc05429bc..ed70fae21a 100644 --- a/packages/fcl-base/src/fpexprpars.pp +++ b/packages/fcl-base/src/fpexprpars.pp @@ -896,6 +896,7 @@ Resourcestring SErrCaseLabelNotAConst = 'Case label %d "%s" is not a constant expression'; SErrCaseLabelType = 'Case label %d "%s" needs type %s, but has type %s'; SErrCaseValueType = 'Case value %d "%s" needs type %s, but has type %s'; + SErrDivisionByZero = '%d division by zero'; { --------------------------------------------------------------------- Auxiliary functions @@ -3564,13 +3565,27 @@ begin Left.GetNodeValue(Result); Right.GetNodeValue(RRes); case Result.ResultType of - rtInteger : Result.ResFloat:=Result.ResInteger/RRes.ResInteger; - rtFloat : Result.ResFloat:=Result.ResFloat/RRes.ResFloat; + rtInteger : + if RRes.ResInteger<>0 then + Result.ResFloat:=Result.ResInteger/RRes.ResInteger + else + RaiseParserError(SErrDivisionByZero, [ResultTypeName(rtInteger)]); + rtFloat : + if RRes.ResFloat<>0 then + Result.ResFloat:=Result.ResFloat/RRes.ResFloat + else + RaiseParserError(SErrDivisionByZero, [ResultTypeName(rtInteger)]); rtCurrency : if NodeType=rtCurrency then - Result.ResCurrency:=Result.ResCurrency/RRes.ResCurrency + if RRes.ResCurrency <> 0 then + Result.ResCurrency:=Result.ResCurrency/RRes.ResCurrency + else + RaiseParserError(SErrDivisionByZero, [ResultTypeName(rtCurrency)]) else - Result.ResFloat:=Result.ResFloat/RRes.ResFloat; + if RRes.ResFloat<> 0 then + Result.ResFloat:=Result.ResFloat/RRes.ResFloat + else + RaiseParserError(SErrDivisionByZero, [ResultTypeName(rtFloat)]); end; Result.ResultType:=NodeType; end;