diff options
author | Parth Wazurkar <parthwazurkar@gmail.com> | 2018-07-13 21:36:01 +0530 |
---|---|---|
committer | Parth Wazurkar <parthwazurkar@gmail.com> | 2018-07-13 21:36:01 +0530 |
commit | 5f57c6a8e8556d9ca995de3b34109508a849fbae (patch) | |
tree | de3ba711ceee0095d3850c2da8a3dc30e5fdfee1 | |
parent | 9678e0c902e7046a7f10830e0c510753b3ac4d99 (diff) | |
download | freetype2-5f57c6a8e8556d9ca995de3b34109508a849fbae.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; |