summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParth Wazurkar <parthwazurkar@gmail.com>2018-07-13 21:36:01 +0530
committerParth Wazurkar <parthwazurkar@gmail.com>2018-07-30 23:57:57 +0530
commite4ec41fc02469c47cb653f050415ee437e301edb (patch)
tree88ee6dcb7ba1fe7c4dced8467ec7de6a6a46b774
parentab75cfedd094f9868dda920402018914fd30341a (diff)
downloadfreetype2-e4ec41fc02469c47cb653f050415ee437e301edb.tar.gz
[pk] Improve error checking in font file.
* src/pk/pklib.c (pk_load_font): Add check for `PK_ID' and `PK_PRE' command in the font file.
-rw-r--r--src/pk/pklib.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/pk/pklib.c b/src/pk/pklib.c
index eecf77dc4..b612563db 100644
--- a/src/pk/pklib.c
+++ b/src/pk/pklib.c
@@ -287,7 +287,7 @@ unsigned char bit_table[] = {
PK_Glyph *goptr )
{
PK_Glyph go;
- UINT1 instr;
+ UINT1 instr, pre, id;;
UINT4 ds, check_sum, hppp, vppp, k;
unsigned int flag, dny_f, bw, ess, size;
UINT4 cc, tfm, dx, dy, dm, w, h, rs;
@@ -300,6 +300,25 @@ unsigned char bit_table[] = {
go = NULL;
nchars = -1;
+ if( FT_STREAM_SEEK( 0 ) )
+ goto Exit;
+
+ pre = READ_UINT1( stream );
+ if (pre != PK_PRE)
+ {
+ FT_ERROR(( "pk_load_font: missing PK_PRE(247) field\n" ));
+ error = FT_THROW( Unknown_File_Format );
+ goto Exit;
+ }
+
+ id = READ_UINT1( stream );
+ if (id != PK_ID)
+ {
+ FT_ERROR(( "pk_load_font: missing PK_ID(89) field\n" ));
+ error = FT_THROW( Unknown_File_Format );
+ goto Exit;
+ }
+
k = READ_UINT1( stream );
if ( FT_STREAM_SKIP( k ) )
goto Exit;
@@ -469,6 +488,7 @@ unsigned char bit_table[] = {
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
+
index = cc - go->code_min;
go->bm_table[index].bbx_width = w;
go->bm_table[index].bbx_height = h;