Browse Source

* Some Range Checking fixes from Graeme Geldenhuys

git-svn-id: trunk@35094 -
michael 8 years ago
parent
commit
9749ddc3bb
1 changed files with 11 additions and 6 deletions
  1. 11 6
      packages/fcl-pdf/src/fpttfsubsetter.pp

+ 11 - 6
packages/fcl-pdf/src/fpttfsubsetter.pp

@@ -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;