diff options
author | Parth Wazurkar <parthwazurkar@gmail.com> | 2018-07-13 21:36:01 +0530 |
---|---|---|
committer | Parth Wazurkar <parthwazurkar@gmail.com> | 2018-07-30 23:57:57 +0530 |
commit | e4ec41fc02469c47cb653f050415ee437e301edb (patch) | |
tree | 88ee6dcb7ba1fe7c4dced8467ec7de6a6a46b774 | |
parent | ab75cfedd094f9868dda920402018914fd30341a (diff) | |
download | freetype2-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.c | 22 |
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; |