[UVS] Stabilizes UVS supporting functions against non-UVS fonts.
UVS supporting functions assume the variation handler functions are valid. When a font without cmap format 14 is given, these function pointers are left as NULL, so calling these functions causes NULL pointer dereference. * src/base/ftobjs.c (FT_Face_GetCharVariantIndex): Check the pointer FT_CMap_Class->char_var_index before calling it. (FT_Face_GetCharVariantIsDefault): Check the pointer FT_CMap_Class->char_var_default before calling it. (FT_Face_GetVariantSelectors): Check the pointer FT_CMap_Class->variant_list before calling it. (FT_Face_GetVariantsOfChar): Check the pointer FT_CMap_Class->charvariant_list before calling it. (FT_Face_GetCharsOfVariant): Check the pointer FT_CMap_Class->variantchar_list before calling it.
This commit is contained in:
parent
6aee69096f
commit
e891e4d6f1
20
ChangeLog
20
ChangeLog
|
@ -1,3 +1,23 @@
|
||||||
|
2010-11-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
||||||
|
|
||||||
|
[UVS] Stabilizes UVS supporting functions against non-UVS fonts.
|
||||||
|
|
||||||
|
UVS supporting functions assume the variation handler functions
|
||||||
|
are valid. When fonts without cmap format 14 is given, these
|
||||||
|
function pointers are left as NULL, so calling these functions
|
||||||
|
causes NULL pointer dereference.
|
||||||
|
|
||||||
|
* src/base/ftobjs.c (FT_Face_GetCharVariantIndex): Check the pointer
|
||||||
|
FT_CMap_Class->char_var_index before calling it.
|
||||||
|
(FT_Face_GetCharVariantIsDefault): Check the pointer
|
||||||
|
FT_CMap_Class->char_var_default before calling it.
|
||||||
|
(FT_Face_GetVariantSelectors): Check the pointer
|
||||||
|
FT_CMap_Class->variant_list before calling it.
|
||||||
|
(FT_Face_GetVariantsOfChar): Check the pointer
|
||||||
|
FT_CMap_Class->charvariant_list before calling it.
|
||||||
|
(FT_Face_GetCharsOfVariant): Check the pointer
|
||||||
|
FT_CMap_Class->variantchar_list before calling it.
|
||||||
|
|
||||||
2010-11-01 Alexei Podtelezhnikov <apodtele@gmail.com>
|
2010-11-01 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||||
|
|
||||||
[ftsmooth] Improve rendering.
|
[ftsmooth] Improve rendering.
|
||||||
|
|
|
@ -3291,6 +3291,10 @@
|
||||||
FT_CMap vcmap = FT_CMAP( charmap );
|
FT_CMap vcmap = FT_CMAP( charmap );
|
||||||
|
|
||||||
|
|
||||||
|
/* font without TT cmap format 14 has no char_var_index() */
|
||||||
|
if ( !( vcmap->clazz ) || !( vcmap->clazz->char_var_index ) )
|
||||||
|
return result;
|
||||||
|
|
||||||
if ( charcode > 0xFFFFFFFFUL )
|
if ( charcode > 0xFFFFFFFFUL )
|
||||||
{
|
{
|
||||||
FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
|
FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
|
||||||
|
@ -3332,6 +3336,10 @@
|
||||||
FT_CMap vcmap = FT_CMAP( charmap );
|
FT_CMap vcmap = FT_CMAP( charmap );
|
||||||
|
|
||||||
|
|
||||||
|
/* font without TT cmap format 14 has no char_var_index() */
|
||||||
|
if ( !( vcmap->clazz ) || !( vcmap->clazz->char_var_default ) )
|
||||||
|
return result;
|
||||||
|
|
||||||
if ( charcode > 0xFFFFFFFFUL )
|
if ( charcode > 0xFFFFFFFFUL )
|
||||||
{
|
{
|
||||||
FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
|
FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
|
||||||
|
@ -3372,6 +3380,10 @@
|
||||||
FT_Memory memory = FT_FACE_MEMORY( face );
|
FT_Memory memory = FT_FACE_MEMORY( face );
|
||||||
|
|
||||||
|
|
||||||
|
/* font without TT cmap format 14 has no variant_list() */
|
||||||
|
if ( !( vcmap->clazz ) || !( vcmap->clazz->variant_list ) )
|
||||||
|
return result;
|
||||||
|
|
||||||
result = vcmap->clazz->variant_list( vcmap, memory );
|
result = vcmap->clazz->variant_list( vcmap, memory );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3400,6 +3412,10 @@
|
||||||
FT_Memory memory = FT_FACE_MEMORY( face );
|
FT_Memory memory = FT_FACE_MEMORY( face );
|
||||||
|
|
||||||
|
|
||||||
|
/* font without TT cmap format 14 has no charvariant_list() */
|
||||||
|
if ( !( vcmap->clazz ) || !( vcmap->clazz->charvariant_list ) )
|
||||||
|
return result;
|
||||||
|
|
||||||
if ( charcode > 0xFFFFFFFFUL )
|
if ( charcode > 0xFFFFFFFFUL )
|
||||||
{
|
{
|
||||||
FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
|
FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
|
||||||
|
@ -3434,6 +3450,10 @@
|
||||||
FT_Memory memory = FT_FACE_MEMORY( face );
|
FT_Memory memory = FT_FACE_MEMORY( face );
|
||||||
|
|
||||||
|
|
||||||
|
/* font without TT cmap format 14 has no variantchar_list() */
|
||||||
|
if ( !( vcmap->clazz ) || !( vcmap->clazz->variantchar_list ) )
|
||||||
|
return result;
|
||||||
|
|
||||||
if ( variantSelector > 0xFFFFFFFFUL )
|
if ( variantSelector > 0xFFFFFFFFUL )
|
||||||
{
|
{
|
||||||
FT_TRACE1(( "FT_Get_Char_Index: too large variantSelector" ));
|
FT_TRACE1(( "FT_Get_Char_Index: too large variantSelector" ));
|
||||||
|
|
Loading…
Reference in New Issue