diff options
author | jkeil <jkeil@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-09-10 12:44:47 +0000 |
---|---|---|
committer | jkeil <jkeil@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-09-10 12:44:47 +0000 |
commit | fb3b95bc3a76675ad76174638ee034052b12046e (patch) | |
tree | 668088af2fe33144593a1cf883e81f3231af7458 /Gui | |
parent | 9088ca28e9d6a9051c81e10d41ae83e2506ef167 (diff) | |
download | mpv-fb3b95bc3a76675ad76174638ee034052b12046e.tar.bz2 mpv-fb3b95bc3a76675ad76174638ee034052b12046e.tar.xz |
Use the character substitution code from fntRender() / fntTextWidth()
for non-existant characters in fntTextHeight(), too.
Otherwise the image height is mis-computed and we allocate an output image
that is too small; this could result in malloc heap corruption.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7354 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'Gui')
-rw-r--r-- | Gui/skin/font.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/Gui/skin/font.c b/Gui/skin/font.c index 7db2d6ea30..65f196fe73 100644 --- a/Gui/skin/font.c +++ b/Gui/skin/font.c @@ -119,7 +119,11 @@ int fntTextWidth( int id,char * str ) if ( ( !Fonts[id] )||( !str[0] ) ) return 0; for ( i=0;i < (unsigned int)strlen( str );i++ ) - size+=( Fonts[id]->Fnt[ (unsigned char)str[i] ].sx == -1? Fonts[id]->Fnt[ 32 ].sx : Fonts[id]->Fnt[ (unsigned char)str[i] ].sx ); + { + unsigned char c = (unsigned char)str[i]; + if ( Fonts[id]->Fnt[c].sx == -1 ) c = ' '; + size+= Fonts[id]->Fnt[ c ].sx; + } return size; } @@ -131,7 +135,10 @@ int fntTextHeight( int id,char * str ) for ( i=0;i < (int)strlen( str );i++ ) { - int h = Fonts[id]->Fnt[ (unsigned char)str[i] ].sy; + int h; + unsigned char c = (unsigned char)str[i]; + if ( Fonts[id]->Fnt[c].sx == -1 ) c = ' '; + h = Fonts[id]->Fnt[c].sy; if ( h > max ) max=h; } return max; |