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

This commit is contained in:
Pierre Muller 2025-05-20 07:48:42 +00:00
parent 98aa472873
commit 57a53d6532

View File

@ -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;