BIFFExplorer: Fix ValueGrid crashing in case of zero-size BIFF records.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4522 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2016-02-21 20:00:10 +00:00
parent c912707ac3
commit bb978ecb2c

View File

@ -1055,7 +1055,6 @@ var
pa: PAnsiChar;
begin
idx := FCurrOffset;
// idx := HexEditor.SelStart.Index;
i := ValueGrid.RowCount;
j := ValueGrid.ColCount;
@ -1121,7 +1120,7 @@ begin
ValueGrid.Cells[2, VALUE_ROW_INT64] := '';
end;
// Singke
// Single
if idx <= Length(FBuffer) - SizeOf(single) then begin
for i:=0 to SizeOf(single)-1 do buf[i] := FBuffer[idx+i];
ValueGrid.Cells[1, VALUE_ROW_SINGLE] := Format('%f', [sng]);
@ -1162,17 +1161,23 @@ begin
// PAnsiChar
// Avoid buffer overrun
pa := PAnsiChar(@FBuffer[idx]);
ls := 0;
while (pa^ <> #0) and (pa - @FBuffer[0] < Length(FBuffer)) do
if idx < Length(FBuffer) then begin
pa := PAnsiChar(@FBuffer[idx]);
ls := 0;
while (pa^ <> #0) and (pa - @FBuffer[0] < Length(FBuffer)) do
begin
inc(pa);
inc(ls);
end;
SetLength(s, ls);
Move(FBuffer[idx], s[1], ls);
ValueGrid.Cells[1, VALUE_ROW_PANSICHAR] := s;
ValueGrid.Cells[2, VALUE_ROW_PANSICHAR] := Format('%d ... %d', [idx, idx + ls]);
end else
begin
inc(pa);
inc(ls);
ValueGrid.Cells[1, VALUE_ROW_PANSICHAR] := '';
ValueGrid.Cells[2, VALUE_ROW_PANSICHAR] := '';
end;
SetLength(s, ls);
Move(FBuffer[idx], s[1], ls);
ValueGrid.Cells[1, VALUE_ROW_PANSICHAR] := s;
ValueGrid.Cells[2, VALUE_ROW_PANSICHAR] := Format('%d ... %d', [idx, idx + ls]);
// WideString
if idx < Length(FBuffer) then begin
@ -1197,16 +1202,22 @@ begin
// PWideChar
// Avoid buffer overrun
pw := PWideChar(@FBuffer[idx]);
ls := 0;
while (pw^ <> #0) and (pw - @FBuffer[0] < Length(FBuffer)-1) do
if idx < Length(FBuffer) then begin
pw := PWideChar(@FBuffer[idx]);
ls := 0;
while (pw^ <> #0) and (pw - @FBuffer[0] < Length(FBuffer)-1) do
begin
inc(pw);
inc(ls);
end;
s := {%H-}WideCharLenToString(PWideChar(@FBuffer[idx]), ls);
ValueGrid.Cells[1, VALUE_ROW_PWIDECHAR] := s;
ValueGrid.Cells[2, VALUE_ROW_PWIDECHAR] := Format('%d ... %d', [idx, idx + ls * SizeOf(widechar)]);
end else
begin
inc(pw);
inc(ls);
ValueGrid.Cells[1, VALUE_ROW_PWIDECHAR] := '';
ValueGrid.Cells[2, VALUE_ROW_PWIDECHAR] := '';
end;
s := {%H-}WideCharLenToString(PWideChar(@FBuffer[idx]), ls);
ValueGrid.Cells[1, VALUE_ROW_PWIDECHAR] := s;
ValueGrid.Cells[2, VALUE_ROW_PWIDECHAR] := Format('%d ... %d', [idx, idx + ls * SizeOf(widechar)]);
end;