فهرست منبع

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

Jonas Maebe 26 سال پیش
والد
کامیت
6c3f032c9f
1فایلهای تغییر یافته به همراه10 افزوده شده و 8 حذف شده
  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