Kaynağa Gözat

* Fix integer overflow not being detected. Issue #39406

Michaël Van Canneyt 3 yıl önce
ebeveyn
işleme
1e74c418ae
1 değiştirilmiş dosya ile 7 ekleme ve 3 silme
  1. 7 3
      rtl/objpas/sysutils/sysstr.inc

+ 7 - 3
rtl/objpas/sysutils/sysstr.inc

@@ -960,10 +960,14 @@ begin
 end;
 
 function TryStrToInt(const s: string; out i : Longint) : boolean;
-var Error : word;
+var
+  Error : word;
+  li : Int64;
 begin
-  Val(s, i, Error);
-  TryStrToInt:=Error=0
+  Val(s, li, Error);
+  TryStrToInt:=(Error=0) and (li<=High(Longint)) and (li>=Low(Longint));
+  if TryStrToInt then
+    i:=li;
 end;
 
 {   StrToInt converts the string S to an integer value,