shithub: freetype+ttf2subf

Download patch

ref: 73aa20ca1d86f6c838bd534cda741adc4cfa7aee
parent: d2d843a01ce7815c11458eb0c1a319a525139af1
author: suzuki toshiya <[email protected]>
date: Sun Sep 19 21:30:38 EDT 2010

[cff] Truncate the element length at the end of the stream.
See Savannah bug #30975.

* src/cff/cffload.c (cff_index_access_element): `off2', the
offset to the next element is truncated at the end of the
stream to prevent invalid I/O.  As `off1', the offset to the
requested element has been checked by FT_STREAM_SEEK(),
`off2' should be checked similarly.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,15 @@
 2010-09-19  suzuki toshiya  <[email protected]>
+ 
+	[cff] Truncate the element length at the end of the stream.
+	See Savannah bug #30975.
+ 
+	* src/cff/cffload.c (cff_index_access_element): `off2', the
+ 	offset to the next element is truncated at the end of the
+	stream to prevent invalid I/O.  As `off1', the offset to the
+	requested element has been checked by FT_STREAM_SEEK(),
+	`off2' should be checked similarly.
+
+2010-09-19  suzuki toshiya  <[email protected]>
 
 	[cff] Ignore CID > 0xFFFFU.
 	See Savannah bug #30975.
--- a/src/cff/cffload.c
+++ b/src/cff/cffload.c
@@ -519,6 +519,17 @@
         }
       }
 
+      /* XXX: should check off2 does not exceed the end of this entry   */
+      /*      at present, only truncate off 2 at the end of this stream */
+      if ( idx->data_offset + off2 - 1 > stream->size )
+      {
+        FT_ERROR(( "cff_index_access_element:"
+                   " offset to next entry (%d)"
+                   " exceeds the end of stream (%d)\n",
+                   off2, stream->size - idx->data_offset + 1 ));
+        off2 = stream->size - idx->data_offset + 1;
+      }
+
       /* access element */
       if ( off1 && off2 > off1 )
       {