* Some Range Checking fixes from Graeme Geldenhuys

git-svn-id: trunk@35094 -
This commit is contained in:
michael 2016-12-09 17:50:22 +00:00
parent d133f210ca
commit 9749ddc3bb

View File

@ -52,7 +52,7 @@ type
function ToUInt32(const ABytes: AnsiString): UInt32; function ToUInt32(const ABytes: AnsiString): UInt32;
function GetRawTable(const ATableName: AnsiString): TMemoryStream; function GetRawTable(const ATableName: AnsiString): TMemoryStream;
function WriteFileHeader(AOutStream: TStream; const nTables: integer): uint32; function WriteFileHeader(AOutStream: TStream; const nTables: integer): uint32;
function WriteTableHeader(AOutStream: TStream; const ATag: AnsiString; const AOffset: UInt32; const AData: TStream): uint32; function WriteTableHeader(AOutStream: TStream; const ATag: AnsiString; const AOffset: UInt32; const AData: TStream): int64;
procedure WriteTableBodies(AOutStream: TStream; const ATables: TStringList); procedure WriteTableBodies(AOutStream: TStream; const ATables: TStringList);
// AGlyphID is the original GlyphID in the original TTF file // AGlyphID is the original GlyphID in the original TTF file
function GetCharIDfromGlyphID(const AGlyphID: uint32): uint32; function GetCharIDfromGlyphID(const AGlyphID: uint32): uint32;
@ -192,9 +192,9 @@ begin
end; end;
function TFontSubsetter.WriteTableHeader(AOutStream: TStream; const ATag: AnsiString; const AOffset: UInt32; function TFontSubsetter.WriteTableHeader(AOutStream: TStream; const ATag: AnsiString; const AOffset: UInt32;
const AData: TStream): uint32; const AData: TStream): int64;
var var
checksum: UInt32; checksum: Int64;
n: integer; n: integer;
lByte: Byte; lByte: Byte;
begin begin
@ -804,7 +804,12 @@ begin
// idDelta // idDelta
for i := 0 to segCount-1 do for i := 0 to segCount-1 do
WriteUInt16(Result, idDelta[i]); begin
{$IFDEF gDEBUG}
writeln(Format(' idDelta[%d] = %d', [i, idDelta[i]]));
{$ENDIF}
WriteInt16(Result, idDelta[i]);
end;
// idRangeOffset // idRangeOffset
for i := 0 to segCount-1 do for i := 0 to segCount-1 do
@ -887,8 +892,8 @@ end;
procedure TFontSubsetter.SaveToStream(const AStream: TStream); procedure TFontSubsetter.SaveToStream(const AStream: TStream);
var var
checksum: uint64; checksum: int64;
offset: uint64; offset: int64;
head: TStream; head: TStream;
hhea: TStream; hhea: TStream;
maxp: TStream; maxp: TStream;