summaryrefslogtreecommitdiffstats
path: root/Gui
diff options
context:
space:
mode:
authorjkeil <jkeil@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-09-10 12:44:47 +0000
committerjkeil <jkeil@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-09-10 12:44:47 +0000
commitfb3b95bc3a76675ad76174638ee034052b12046e (patch)
tree668088af2fe33144593a1cf883e81f3231af7458 /Gui
parent9088ca28e9d6a9051c81e10d41ae83e2506ef167 (diff)
downloadmpv-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.c11
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;