vdr 1.5.16 - minor problem in font.c
Commit Message
On 02/29/08 14:29, Klaus Schmidinger wrote:
> On 02/29/08 01:04, Tobi wrote:
>> Hello,
>>
>> DrawText() in font.c uses the method Glyph() which may return a null pointer,
>> but doesn't check the returned pointer.
>>
>> I came across this bug, when checking a bug report from Sven Mueller:
>>
>> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=467512
>>
>> When info.vdr contains an invalid character (like in the above example a 0xA0 -
>> a Latin-1 NO-BREAK SPACE), Glyph() returns null, which then causes a segfault
>> when dereferencing the null-pointer.
>>
>> The easiest way to fix this, would probably be to ignore such invalid
>> characters, which is, what the attached two-line-patch will do. But maybe it's
>> better to replace such characters with a default character - maybe a space or a '?'.
>
> I also think showing some replacement character is best.
>
> Can you please verify if the attached patch does this correctly?
>
> If this works, I'd like to include it in version 1.6.0.
Maybe the attached version is even better, because there are also other
places where Glyph() is called.
Klaus
@@ -214,6 +214,9 @@
return Glyph;
}
}
+#define UNKNOWN_GLYPH_INDICATOR '?'
+ if (CharCode != UNKNOWN_GLYPH_INDICATOR)
+ return Glyph(UNKNOWN_GLYPH_INDICATOR);
return NULL;
}
@@ -258,6 +261,8 @@
uint sym = Utf8CharGet(s, sl);
s += sl;
cGlyph *g = Glyph(sym, AntiAliased);
+ if (!g)
+ continue;
int kerning = Kerning(g, prevSym);
prevSym = sym;
uchar *buffer = g->Bitmap();