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-13 21:36:01 +0530
commit5f57c6a8e8556d9ca995de3b34109508a849fbae (patch)
treede3ba711ceee0095d3850c2da8a3dc30e5fdfee1
parent9678e0c902e7046a7f10830e0c510753b3ac4d99 (diff)
downloadfreetype2-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.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;