From f56e9719586735d9c8baadfb42e75b03a1364fb0 Mon Sep 17 00:00:00 2001 From: marco Date: Wed, 11 Mar 2020 20:08:26 +0000 Subject: [PATCH] * fix for bug #36722. Assigning result of compare(w)str to shortint risks overflow if length difference>=128. Add sign() calls to fix this. git-svn-id: trunk@44290 - --- packages/rtl-objpas/src/inc/variants.pp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/rtl-objpas/src/inc/variants.pp b/packages/rtl-objpas/src/inc/variants.pp index a03ccc476a..5a8e106875 100644 --- a/packages/rtl-objpas/src/inc/variants.pp +++ b/packages/rtl-objpas/src/inc/variants.pp @@ -1183,10 +1183,10 @@ begin if OpCode in [opCmpEq, opCmpNe] then if Length(WideString(Left)) <> Length(WideString(Right)) then Exit(-1); - Result := WideCompareStr( + Result := sign(WideCompareStr( WideString(Left), WideString(Right) - ); + )); end; @@ -1204,10 +1204,10 @@ begin if OpCode in [opCmpEq, opCmpNe] then if Length(AnsiString(Left)) <> Length(AnsiString(Right)) then Exit(-1); - Result := CompareStr( + Result := sign(CompareStr( AnsiString(Left), AnsiString(Right) - ); + )); end;