You've already forked lazarus-ccr
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:
@ -1055,7 +1055,6 @@ var
|
|||||||
pa: PAnsiChar;
|
pa: PAnsiChar;
|
||||||
begin
|
begin
|
||||||
idx := FCurrOffset;
|
idx := FCurrOffset;
|
||||||
// idx := HexEditor.SelStart.Index;
|
|
||||||
|
|
||||||
i := ValueGrid.RowCount;
|
i := ValueGrid.RowCount;
|
||||||
j := ValueGrid.ColCount;
|
j := ValueGrid.ColCount;
|
||||||
@ -1121,7 +1120,7 @@ begin
|
|||||||
ValueGrid.Cells[2, VALUE_ROW_INT64] := '';
|
ValueGrid.Cells[2, VALUE_ROW_INT64] := '';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Singke
|
// Single
|
||||||
if idx <= Length(FBuffer) - SizeOf(single) then begin
|
if idx <= Length(FBuffer) - SizeOf(single) then begin
|
||||||
for i:=0 to SizeOf(single)-1 do buf[i] := FBuffer[idx+i];
|
for i:=0 to SizeOf(single)-1 do buf[i] := FBuffer[idx+i];
|
||||||
ValueGrid.Cells[1, VALUE_ROW_SINGLE] := Format('%f', [sng]);
|
ValueGrid.Cells[1, VALUE_ROW_SINGLE] := Format('%f', [sng]);
|
||||||
@ -1162,6 +1161,7 @@ begin
|
|||||||
|
|
||||||
// PAnsiChar
|
// PAnsiChar
|
||||||
// Avoid buffer overrun
|
// Avoid buffer overrun
|
||||||
|
if idx < Length(FBuffer) then begin
|
||||||
pa := PAnsiChar(@FBuffer[idx]);
|
pa := PAnsiChar(@FBuffer[idx]);
|
||||||
ls := 0;
|
ls := 0;
|
||||||
while (pa^ <> #0) and (pa - @FBuffer[0] < Length(FBuffer)) do
|
while (pa^ <> #0) and (pa - @FBuffer[0] < Length(FBuffer)) do
|
||||||
@ -1173,6 +1173,11 @@ begin
|
|||||||
Move(FBuffer[idx], s[1], ls);
|
Move(FBuffer[idx], s[1], ls);
|
||||||
ValueGrid.Cells[1, VALUE_ROW_PANSICHAR] := s;
|
ValueGrid.Cells[1, VALUE_ROW_PANSICHAR] := s;
|
||||||
ValueGrid.Cells[2, VALUE_ROW_PANSICHAR] := Format('%d ... %d', [idx, idx + ls]);
|
ValueGrid.Cells[2, VALUE_ROW_PANSICHAR] := Format('%d ... %d', [idx, idx + ls]);
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
ValueGrid.Cells[1, VALUE_ROW_PANSICHAR] := '';
|
||||||
|
ValueGrid.Cells[2, VALUE_ROW_PANSICHAR] := '';
|
||||||
|
end;
|
||||||
|
|
||||||
// WideString
|
// WideString
|
||||||
if idx < Length(FBuffer) then begin
|
if idx < Length(FBuffer) then begin
|
||||||
@ -1197,6 +1202,7 @@ begin
|
|||||||
|
|
||||||
// PWideChar
|
// PWideChar
|
||||||
// Avoid buffer overrun
|
// Avoid buffer overrun
|
||||||
|
if idx < Length(FBuffer) then begin
|
||||||
pw := PWideChar(@FBuffer[idx]);
|
pw := PWideChar(@FBuffer[idx]);
|
||||||
ls := 0;
|
ls := 0;
|
||||||
while (pw^ <> #0) and (pw - @FBuffer[0] < Length(FBuffer)-1) do
|
while (pw^ <> #0) and (pw - @FBuffer[0] < Length(FBuffer)-1) do
|
||||||
@ -1207,6 +1213,11 @@ begin
|
|||||||
s := {%H-}WideCharLenToString(PWideChar(@FBuffer[idx]), ls);
|
s := {%H-}WideCharLenToString(PWideChar(@FBuffer[idx]), ls);
|
||||||
ValueGrid.Cells[1, VALUE_ROW_PWIDECHAR] := s;
|
ValueGrid.Cells[1, VALUE_ROW_PWIDECHAR] := s;
|
||||||
ValueGrid.Cells[2, VALUE_ROW_PWIDECHAR] := Format('%d ... %d', [idx, idx + ls * SizeOf(widechar)]);
|
ValueGrid.Cells[2, VALUE_ROW_PWIDECHAR] := Format('%d ... %d', [idx, idx + ls * SizeOf(widechar)]);
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
ValueGrid.Cells[1, VALUE_ROW_PWIDECHAR] := '';
|
||||||
|
ValueGrid.Cells[2, VALUE_ROW_PWIDECHAR] := '';
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user