Browse Source

* avoid unwanted type conversion from cardinal to longint in val for
signed and unsigned 32bit int

Jonas Maebe 26 years ago
parent
commit
6c3f032c9f
1 changed files with 10 additions and 8 deletions
  1. 10 8
      rtl/inc/sstrings.inc

+ 10 - 8
rtl/inc/sstrings.inc

@@ -348,10 +348,9 @@ end;
 
 Function ValSignedInt(DestSize: longint; Const S: ShortString; var Code: ValSInt): ValSInt; [public, alias:'FPC_VAL_SINT_SHORTSTR'];
 var
-  u: ValSInt;
+  u, temp, prev: ValUInt;
   base : byte;
   negative : boolean;
-  temp, prev: ValUInt;
 begin
   ValSignedInt := 0;
   Temp:=0;
@@ -385,9 +384,9 @@ begin
        End;
      if (u>=base) or
         ((base = 10) and
-         (MaxSIntValue-Temp < u)) or
+         (MaxSIntValue < u+temp)) or
         ((base <> 10) and
-         (MaxUIntValue-Temp < u)) then
+         (ValUInt(MaxUIntValue-Temp) < u)) then
        begin
          ValSignedInt:=0;
          exit;
@@ -415,10 +414,9 @@ end;
 
 Function ValUnsignedInt(Const S: ShortString; var Code: ValSInt): ValUInt; [public, alias:'FPC_VAL_UINT_SHORTSTR'];
 var
-  u: ValUInt;
+  u, prev: ValUInt;
   base : byte;
   negative : boolean;
-  prev: ValUInt;
 begin
   ValUnSignedInt:=0;
   Code:=InitVal(s,negative,base);
@@ -443,7 +441,7 @@ begin
          ValUnsignedInt := 0;
          Exit
        End;
-     if (u>=base) or (MaxUIntValue-ValUnsignedInt < u) then
+     if (u>=base) or (ValUInt(MaxUIntValue-ValUnsignedInt) < u) then
       begin
         ValUnsignedInt:=0;
         exit;
@@ -565,7 +563,11 @@ end;
 
 {
   $Log$
-  Revision 1.30  1999-11-06 14:35:39  peter
+  Revision 1.31  1999-12-11 19:07:44  jonas
+    * avoid unwanted type conversion from cardinal to longint in val for
+      signed and unsigned 32bit int
+
+  Revision 1.30  1999/11/06 14:35:39  peter
     * truncated log
 
   Revision 1.29  1999/07/05 20:04:26  peter