mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 01:27:55 +02:00
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:
parent
59d5d6ec95
commit
e49025a086
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user