Browse Source

db xmldatapacketreader: fix range check error in InitLoadRecords

Ondrej Pokorny 3 years ago
parent
commit
2093be8fc3
1 changed files with 15 additions and 8 deletions
  1. 15 8
      packages/fcl-db/src/base/xmldatapacketreader.pp

+ 15 - 8
packages/fcl-db/src/base/xmldatapacketreader.pp

@@ -306,7 +306,8 @@ end;
 procedure TXMLDatapacketReader.InitLoadRecords;
 
 var ChangeLogStr : String;
-    i,cp         : integer;
+    C, StartC    : PChar;
+    cp           : integer;
     ps           : string;
 
 begin
@@ -319,12 +320,17 @@ begin
     ChangeLogStr:='';
   ps := '';
   cp := 0;
-  if ChangeLogStr<>'' then for i := 1 to length(ChangeLogStr)+1 do
-    begin
-    if not (ChangeLogStr[i] in [' ',#0]) then
-      ps := ps + ChangeLogStr[i]
-    else
+  if ChangeLogStr='' then
+    Exit;
+
+  C := PChar(ChangeLogStr);
+  StartC := C;
+  repeat
+    if (C^ in [' ',#0]) then
       begin
+      SetLength(ps, C-StartC);
+      if Length(ps)>0 then
+        Move(StartC^, ps[1], C-StartC);
       case (cp mod 3) of
         0 : begin
             SetLength(FChangeLog,length(FChangeLog)+1);
@@ -340,10 +346,11 @@ begin
               FChangeLog[cp div 3].UpdateKind:=ukModify;
             end;
       end; {case}
-      ps := '';
       inc(cp);
+      StartC := C+1;
       end;
-    end;
+    Inc(C);
+  until C^=#0;
 end;
 
 procedure TXMLDatapacketReader.RestoreRecord;