More -CriotR fixes:

* entfile.pas: Change PPU header falgs filed from longint to dword.
  * ngtcon.pas: Change local variable startoffset type to aword.
  * omfbase.pas: Avoid calling move with a nil string s indexed as s[1],
    to avoid a range check error.
  * owomflib.pas: Disable range check explicitly in hash computation.
  * utils/ppuutils/ppudump.pp: Adapt to flags type change in entfile.pas

git-svn-id: trunk@40163 -
This commit is contained in:
pierre 2018-11-01 21:58:54 +00:00
parent 59d5d6ec95
commit e49025a086
5 changed files with 30 additions and 16 deletions

View File

@ -196,8 +196,8 @@ type
compiler : word;
cpu : word;
target : word;
flags : longint;
size : longint; { size of the ppufile without header }
flags : dword;
size : dword; { size of the ppufile without header }
end;
pentryheader=^tentryheader;

View File

@ -1522,7 +1522,7 @@ function get_next_varsym(def: tabstractrecorddef; const SymList:TFPHashObjectLis
bp : tbitpackedval;
error,
is_packed: boolean;
startoffset: aint;
startoffset: aword;
procedure handle_stringconstn;
begin

View File

@ -1349,18 +1349,23 @@ implementation
internalerror(2015033103);
SetLength(s, len);
UniqueString(s);
Move(RawData[Offset+1],s[1],len);
if len>0 then
Move(RawData[Offset+1],s[1],len);
end;
function TOmfRawRecord.WriteStringAt(Offset: Integer; s: string): Integer;
var
len : longint;
begin
if Length(s)>255 then
len:=Length(s);
if len>255 then
internalerror(2015033101);
result:=Offset+Length(s)+1;
result:=Offset+len+1;
if result>High(RawData) then
internalerror(2015033102);
RawData[Offset]:=Length(s);
Move(s[1], RawData[Offset+1], Length(s));
RawData[Offset]:=len;
if len>0 then
Move(s[1], RawData[Offset+1], len);
end;
function TOmfRawRecord.ReadIndexedRef(Offset: Integer; out IndexedRef: Integer): Integer;
@ -1420,7 +1425,7 @@ implementation
b:=0;
for I:=-3 to RecordLength-2 do
b:=byte(b+RawData[I]);
SetChecksumByte($100-b);
SetChecksumByte(byte($100-b));
end;
function TOmfRawRecord.VerifyChecksumByte: boolean;
@ -1521,14 +1526,18 @@ implementation
end;
procedure TOmfRecord_COMENT.EncodeTo(RawRecord: TOmfRawRecord);
var
len : longint;
begin
RawRecord.RecordType:=RT_COMENT;
if (Length(FCommentString)+3)>High(RawRecord.RawData) then
len:=Length(FCommentString);
if (len+3)>High(RawRecord.RawData) then
internalerror(2015033105);
RawRecord.RecordLength:=Length(FCommentString)+3;
RawRecord.RecordLength:=len+3;
RawRecord.RawData[0]:=CommentType;
RawRecord.RawData[1]:=CommentClass;
Move(FCommentString[1],RawRecord.RawData[2],Length(FCommentString));
if len>0 then
Move(FCommentString[1],RawRecord.RawData[2],len);
RawRecord.CalculateChecksumByte;
end;

View File

@ -421,6 +421,9 @@ implementation
repeat
pb:=@blocks[h.block_x];
success:=false;
{$push}
{ Disable range check in that part of code }
{$R-}
repeat
if pb^[h.bucket_x]=0 then
begin
@ -440,6 +443,7 @@ implementation
end;
h.bucket_x:=(h.bucket_x+h.bucket_d) mod nbuckets;
until h.bucket_x=start_bucket;
{$pop}
if not success then
begin
h.block_x:=(h.block_x+h.block_d) mod nblocks;

View File

@ -545,10 +545,10 @@ begin
end;
function PPUFlags2Str(flags:longint):string;
function PPUFlags2Str(flags:dword):string;
type
tflagopt=record
mask : longint;
mask : dword;
str : string[30];
end;
const
@ -586,10 +586,11 @@ const
(mask: $10000000;str:'i8086_cs_equals_ds'),
(mask: $20000000;str:'package_deny'),
(mask: $40000000;str:'package_weak'),
(mask: longint($80000000);str:'i8086_ss_equals_ds')
(mask: dword($80000000);str:'i8086_ss_equals_ds')
);
var
i,ntflags : longint;
i : longint;
ntflags : dword;
first : boolean;
s : string;
begin