* 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 GetRawTable(const ATableName: AnsiString): TMemoryStream;
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);
// AGlyphID is the original GlyphID in the original TTF file
function GetCharIDfromGlyphID(const AGlyphID: uint32): uint32;
@ -192,9 +192,9 @@ begin
end;
function TFontSubsetter.WriteTableHeader(AOutStream: TStream; const ATag: AnsiString; const AOffset: UInt32;
const AData: TStream): uint32;
const AData: TStream): int64;
var
checksum: UInt32;
checksum: Int64;
n: integer;
lByte: Byte;
begin
@ -804,7 +804,12 @@ begin
// idDelta
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
for i := 0 to segCount-1 do
@ -887,8 +892,8 @@ end;
procedure TFontSubsetter.SaveToStream(const AStream: TStream);
var
checksum: uint64;
offset: uint64;
checksum: int64;
offset: int64;
head: TStream;
hhea: TStream;
maxp: TStream;