Ver Fonte

* Two moves with a string as target are now only exectuted if the number of
bytes to move is greater than 0. This prevents RTE201's when compiled
with range checks enabled.

sg há 24 anos atrás
pai
commit
b07bf6104d
1 ficheiros alterados com 13 adições e 5 exclusões
  1. 13 5
      rtl/objpas/syspch.inc

+ 13 - 5
rtl/objpas/syspch.inc

@@ -36,11 +36,14 @@ type
 {  StrPas converts a PChar to a pascal string  }
 
 function StrPas(Str: PChar): string;
+var
+  l: Integer;
 begin
-  SetLength(result, StrLen(Str));
-  if Length(Result) > 0 then
-    Move(Str^, result[1], Length(result));
-end;
+  l := StrLen(Str);
+  SetLength(result, l);
+  if l > 0 then
+    Move(Str^, result[1], l);
+end ;
 
 {  StrAlloc allocates a buffer of Size + 4
    the size of the allocated buffer is stored at result - 4
@@ -119,7 +122,12 @@ end ;
 
 {
   $Log$
-  Revision 1.3  2000-11-23 11:04:26  sg
+  Revision 1.4  2001-07-30 10:21:09  sg
+  * Two moves with a string as target are now only exectuted if the number of
+    bytes to move is greater than 0. This prevents RTE201's when compiled
+    with range checks enabled.
+
+  Revision 1.3  2000/11/23 11:04:26  sg
   * Protected some Move()'s by 'if' clauses so that the Move won't be
     executed when the length would be 0. Otherwise, the corresponding
     routines might get an RTE when compiled with $R+.