Browse Source

Take into account the size of HexText TBytes open array before calling HexToBin overload with PAnsiChar first parameter

Pierre Muller 2 months ago
parent
commit
57a53d6532
1 changed files with 18 additions and 2 deletions
  1. 18 2
      packages/rtl-objpas/src/inc/strutils.pp

+ 18 - 2
packages/rtl-objpas/src/inc/strutils.pp

@@ -3076,6 +3076,10 @@ procedure BinToHex(const BinBuffer: TBytes; BinBufOffset: Integer; var HexBuffer
 var
   i : longint;
 begin
+  if (Length(HexBuffer)-HexBufOffset) div 2 < Count then
+    Count:=(Length(HexBuffer)-HexBufOffset) div 2;
+  if (Length(BinBuffer)-BinBufOffset) < Count then
+    Count:=Length(BinBuffer)-BinBufOffset;
   for i:=0 to Count-1 do
   begin
     HexBuffer[HexBufOffset+2*i+0]:=Byte(HexDigits[(BinBuffer[BinBufOffset + i] shr 4)]);
@@ -3113,7 +3117,12 @@ begin
   PText:=HexText+HexTextOffset;
   PBinBuf:=PAnsiChar(BinBuffer)+BinBufOffset;
   i:=Count;
-  Result:=HexToBin(PText, PBinBuf, i);
+  if (Length(BinBuffer)-BinBufOffset)<i then
+    i:=Length(BinBuffer)-BinBufOffset;
+  if i<=0 then
+    Result:=0
+  else
+    Result:=HexToBin(PText, PBinBuf, i);
 end;
 
 function HexToBin(const HexText: TBytes; HexTextOffset: Integer; var BinBuffer: TBytes; BinBufOffset: Integer; Count: Integer): Integer;
@@ -3125,7 +3134,14 @@ begin
   PText:=PAnsiChar(HexText)+HexTextOffset;
   PBinBuf:=PAnsiChar(BinBuffer)+BinBufOffset;
   i:=Count;
-  Result:=HexToBin(PText, PBinBuf, i);
+  if (Length(HexText)-HexTextOffset) div 2 < i then
+    i:=(Length(HexText)-HexTextOffset) div 2;
+  if (Length(BinBuffer)-BinBufOffset) < i then
+    i:=Length(BinBuffer)-BinBufOffset;
+  if i<=0 then
+    Result:=0
+  else
+    Result:=HexToBin(PText, PBinBuf, i);
 end;
 
 function HexToBin(HexText: PWideChar; BinBuffer: Pointer; BinBufSize: Integer): Integer;