Browse Source

* 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 -
marco 5 years ago
parent
commit
f56e971958
1 changed files with 4 additions and 4 deletions
  1. 4 4
      packages/rtl-objpas/src/inc/variants.pp

+ 4 - 4
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;