[gxvalid] Fix gcc4.6 compiler warnings in gxvmorx*.c.
* src/gxvalid/gxvmorx.c (gxv_morx_subtables_validate): Conditionalize unvalidated variable `subFeatureFlags'. (gxv_morx_chain_validate): Conditionalize unvalidated variable `defaultFlags'. * src/gxvalid/gxmorx0.c (gxv_morx_subtable_type0_entry_validate): Conditionalize unvalidated variables; `markFirst', `dontAdvance', `markLast', `verb'. * src/gxvalid/gxmorx1.c (gxv_morx_subtable_type1_entry_validate): Conditionalize unvalidated variables; `setMark', `dontAdvance'. * src/gxvalid/gxvmorx2.c (gxv_morx_subtable_type2_ligActionOffset_validate): Conditionalize unvalidated variables; `last', `store'. Checking for overrunning offset is added. (gxv_morx_subtable_type2_entry_validate): Conditionalize unvalidated variables; `setComponent', `dontAdvance', `performAction'. (gxv_morx_subtable_type2_ligatureTable_validate): Check if the GID for ligature does not exceed the max GID in `maxp' table. * src/gxvalid/gxvmort5.c (gxv_morx_subtable_type5_InsertList_validate): Conditionalize unvalidated loading of `insert_glyphID' array. (gxv_morx_subtable_type5_entry_validate): Conditionalize unvalidated variables; `setMark', `dontAdvance', `currentIsKashidaLike', `markedIsKashidaLike', `currentInsertBefore', `markedInsertBefore'.
This commit is contained in:
parent
56be3ac9b1
commit
05fc72c5c7
38
ChangeLog
38
ChangeLog
|
@ -1,3 +1,41 @@
|
|||
2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
||||
|
||||
[gxvalid] Fix gcc4.6 compiler warnings in gxvmorx*.c.
|
||||
|
||||
* src/gxvalid/gxvmorx.c (gxv_morx_subtables_validate):
|
||||
Conditionalize unvalidated variable `subFeatureFlags'.
|
||||
(gxv_morx_chain_validate): Conditionalize unvalidated
|
||||
variable `defaultFlags'.
|
||||
|
||||
* src/gxvalid/gxmorx0.c
|
||||
(gxv_morx_subtable_type0_entry_validate):
|
||||
Conditionalize unvalidated variables; `markFirst',
|
||||
`dontAdvance', `markLast', `verb'.
|
||||
|
||||
* src/gxvalid/gxmorx1.c
|
||||
(gxv_morx_subtable_type1_entry_validate): Conditionalize
|
||||
unvalidated variables; `setMark', `dontAdvance'.
|
||||
|
||||
* src/gxvalid/gxvmorx2.c
|
||||
(gxv_morx_subtable_type2_ligActionOffset_validate):
|
||||
Conditionalize unvalidated variables; `last', `store'.
|
||||
Checking for overrunning offset is added.
|
||||
(gxv_morx_subtable_type2_entry_validate):
|
||||
Conditionalize unvalidated variables; `setComponent',
|
||||
`dontAdvance', `performAction'.
|
||||
(gxv_morx_subtable_type2_ligatureTable_validate):
|
||||
Check if the GID for ligature does not exceed the
|
||||
max GID in `maxp' table.
|
||||
|
||||
* src/gxvalid/gxvmort5.c
|
||||
(gxv_morx_subtable_type5_InsertList_validate):
|
||||
Conditionalize unvalidated loading of `insert_glyphID'
|
||||
array. (gxv_morx_subtable_type5_entry_validate):
|
||||
Conditionalize unvalidated variables; `setMark',
|
||||
`dontAdvance', `currentIsKashidaLike',
|
||||
`markedIsKashidaLike', `currentInsertBefore',
|
||||
`markedInsertBefore'.
|
||||
|
||||
2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
||||
|
||||
[gxvalid] Fix gcc4.6 compiler warnings in gxvmort*.c.
|
||||
|
|
|
@ -68,7 +68,9 @@
|
|||
{
|
||||
FT_ULong length;
|
||||
FT_ULong coverage;
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
FT_ULong subFeatureFlags;
|
||||
#endif
|
||||
FT_ULong type;
|
||||
FT_ULong rest;
|
||||
|
||||
|
@ -76,7 +78,11 @@
|
|||
GXV_LIMIT_CHECK( 4 + 4 + 4 );
|
||||
length = FT_NEXT_ULONG( p );
|
||||
coverage = FT_NEXT_ULONG( p );
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
subFeatureFlags = FT_NEXT_ULONG( p );
|
||||
#else
|
||||
p += 4;
|
||||
#endif
|
||||
|
||||
GXV_TRACE(( "validating chain subtable %d/%d (%d bytes)\n",
|
||||
i + 1, nSubtables, length ));
|
||||
|
@ -97,6 +103,7 @@
|
|||
|
||||
func( p, p + rest, valid );
|
||||
|
||||
/* TODO: subFeatureFlags should be unique in a table? */
|
||||
p += rest;
|
||||
}
|
||||
|
||||
|
@ -112,7 +119,9 @@
|
|||
GXV_Validator valid )
|
||||
{
|
||||
FT_Bytes p = table;
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
FT_ULong defaultFlags;
|
||||
#endif
|
||||
FT_ULong chainLength;
|
||||
FT_ULong nFeatureFlags;
|
||||
FT_ULong nSubtables;
|
||||
|
@ -121,7 +130,11 @@
|
|||
GXV_NAME_ENTER( "morx chain header" );
|
||||
|
||||
GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 );
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
defaultFlags = FT_NEXT_ULONG( p );
|
||||
#else
|
||||
p += 4;
|
||||
#endif
|
||||
chainLength = FT_NEXT_ULONG( p );
|
||||
nFeatureFlags = FT_NEXT_ULONG( p );
|
||||
nSubtables = FT_NEXT_ULONG( p );
|
||||
|
@ -138,6 +151,8 @@
|
|||
|
||||
valid->subtable_length = chainLength;
|
||||
|
||||
/* TODO: defaultFlags should be compared with the flags in tables */
|
||||
|
||||
GXV_EXIT;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,11 +47,15 @@
|
|||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
{
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
FT_UShort markFirst;
|
||||
FT_UShort dontAdvance;
|
||||
FT_UShort markLast;
|
||||
#endif
|
||||
FT_UShort reserved;
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
FT_UShort verb;
|
||||
#endif
|
||||
|
||||
FT_UNUSED( state );
|
||||
FT_UNUSED( glyphOffset_p );
|
||||
|
@ -59,12 +63,16 @@
|
|||
FT_UNUSED( limit );
|
||||
|
||||
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
markFirst = (FT_UShort)( ( flags >> 15 ) & 1 );
|
||||
dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
|
||||
markLast = (FT_UShort)( ( flags >> 13 ) & 1 );
|
||||
#endif
|
||||
|
||||
reserved = (FT_UShort)( flags & 0x1FF0 );
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
verb = (FT_UShort)( flags & 0x000F );
|
||||
#endif
|
||||
|
||||
if ( 0 < reserved )
|
||||
{
|
||||
|
|
|
@ -108,8 +108,10 @@
|
|||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
{
|
||||
#ifdef GXV_LOAD_TRACE_VARS
|
||||
FT_UShort setMark;
|
||||
FT_UShort dontAdvance;
|
||||
#endif
|
||||
FT_UShort reserved;
|
||||
FT_Short markIndex;
|
||||
FT_Short currentIndex;
|
||||
|
@ -122,8 +124,10 @@
|
|||
FT_UNUSED( limit );
|
||||
|
||||
|
||||
#ifdef GXV_LOAD_TRACE_VARS
|
||||
setMark = (FT_UShort)( ( flags >> 15 ) & 1 );
|
||||
dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
|
||||
#endif
|
||||
|
||||
reserved = (FT_UShort)( flags & 0x3FFF );
|
||||
|
||||
|
|
|
@ -168,16 +168,53 @@
|
|||
{
|
||||
/* validate entry in ligActionTable */
|
||||
FT_ULong lig_action;
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
FT_UShort last;
|
||||
FT_UShort store;
|
||||
#endif
|
||||
FT_ULong offset;
|
||||
|
||||
|
||||
lig_action = FT_NEXT_ULONG( p );
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
last = (FT_UShort)( ( lig_action >> 31 ) & 1 );
|
||||
store = (FT_UShort)( ( lig_action >> 30 ) & 1 );
|
||||
#endif
|
||||
|
||||
offset = lig_action & 0x3FFFFFFFUL;
|
||||
|
||||
/* this offset is 30-bit signed value to add to GID */
|
||||
/* it is different from the location offset in mort */
|
||||
if ( ( offset & 0x3FFF0000UL ) == 0x3FFF0000UL )
|
||||
{
|
||||
if ( offset + valid->face->num_glyphs > 0x40000000UL )
|
||||
return;
|
||||
|
||||
GXV_TRACE(( "ligature action table includes"
|
||||
" too negative offset moving all GID"
|
||||
" below defined range: 0x%04x\n",
|
||||
offset & 0xFFFFU ));
|
||||
if ( valid->root->level >= FT_VALIDATE_PARANOID )
|
||||
FT_INVALID_OFFSET;
|
||||
}
|
||||
else if ( ( offset & 0x3FFF0000UL ) == 0x0000000UL )
|
||||
{
|
||||
if ( offset + valid->face->num_glyphs < 0 )
|
||||
return;
|
||||
|
||||
GXV_TRACE(( "ligature action table includes"
|
||||
" too large offset moving all GID"
|
||||
" over defined range: 0x%04x\n",
|
||||
offset & 0xFFFFU ));
|
||||
if ( valid->root->level >= FT_VALIDATE_PARANOID )
|
||||
FT_INVALID_OFFSET;
|
||||
}
|
||||
|
||||
GXV_TRACE(( "ligature action table includes"
|
||||
" invalid offset to add to 16-bit GID:"
|
||||
" 0x%08x\n", offset ));
|
||||
if ( valid->root->level >= FT_VALIDATE_PARANOID )
|
||||
FT_INVALID_OFFSET;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -191,9 +228,11 @@
|
|||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
{
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
FT_UShort setComponent;
|
||||
FT_UShort dontAdvance;
|
||||
FT_UShort performAction;
|
||||
#endif
|
||||
FT_UShort reserved;
|
||||
FT_UShort ligActionIndex;
|
||||
|
||||
|
@ -201,9 +240,11 @@
|
|||
FT_UNUSED( limit );
|
||||
|
||||
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
setComponent = (FT_UShort)( ( flags >> 15 ) & 1 );
|
||||
dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
|
||||
performAction = (FT_UShort)( ( flags >> 13 ) & 1 );
|
||||
#endif
|
||||
|
||||
reserved = (FT_UShort)( flags & 0x1FFF );
|
||||
ligActionIndex = glyphOffset_p->u;
|
||||
|
@ -241,6 +282,9 @@
|
|||
|
||||
GXV_LIMIT_CHECK( 2 );
|
||||
lig_gid = FT_NEXT_USHORT( p );
|
||||
if ( valid->root->level >= FT_VALIDATE_PARANOID &&
|
||||
lig_gid < valid->face->num_glyphs )
|
||||
FT_INVALID_GLYPH_ID;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -118,6 +118,9 @@
|
|||
FT_Bytes p = table + table_index * 2;
|
||||
|
||||
|
||||
#ifndef GXV_LOAD_TRACE_VARS
|
||||
GXV_LIMIT_CHECK( count * 2 );
|
||||
#else
|
||||
while ( p < table + count * 2 + table_index * 2 )
|
||||
{
|
||||
FT_UShort insert_glyphID;
|
||||
|
@ -129,6 +132,7 @@
|
|||
}
|
||||
|
||||
GXV_TRACE(( "\n" ));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -141,12 +145,14 @@
|
|||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
{
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
FT_Bool setMark;
|
||||
FT_Bool dontAdvance;
|
||||
FT_Bool currentIsKashidaLike;
|
||||
FT_Bool markedIsKashidaLike;
|
||||
FT_Bool currentInsertBefore;
|
||||
FT_Bool markedInsertBefore;
|
||||
#endif
|
||||
FT_Byte currentInsertCount;
|
||||
FT_Byte markedInsertCount;
|
||||
FT_Byte currentInsertList;
|
||||
|
@ -155,12 +161,14 @@
|
|||
FT_UNUSED( state );
|
||||
|
||||
|
||||
#ifdef GXV_LOAD_UNUSED_VARS
|
||||
setMark = FT_BOOL( ( flags >> 15 ) & 1 );
|
||||
dontAdvance = FT_BOOL( ( flags >> 14 ) & 1 );
|
||||
currentIsKashidaLike = FT_BOOL( ( flags >> 13 ) & 1 );
|
||||
markedIsKashidaLike = FT_BOOL( ( flags >> 12 ) & 1 );
|
||||
currentInsertBefore = FT_BOOL( ( flags >> 11 ) & 1 );
|
||||
markedInsertBefore = FT_BOOL( ( flags >> 10 ) & 1 );
|
||||
#endif
|
||||
|
||||
currentInsertCount = (FT_Byte)( ( flags >> 5 ) & 0x1F );
|
||||
markedInsertCount = (FT_Byte)( flags & 0x001F );
|
||||
|
|
Loading…
Reference in New Issue