Commit 05b1aea2 authored by Alexandre Julliard's avatar Alexandre Julliard

gdi32: Avoid reading bits outside of the glyph bitmap in GetGlyphOutline.

parent 45c9ec0d
...@@ -4939,14 +4939,10 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format, ...@@ -4939,14 +4939,10 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format,
BYTE *src = ft_face->glyph->bitmap.buffer, *dst = buf; BYTE *src = ft_face->glyph->bitmap.buffer, *dst = buf;
INT h = ft_face->glyph->bitmap.rows; INT h = ft_face->glyph->bitmap.rows;
INT x; INT x;
memset( buf, 0, needed );
while(h--) { while(h--) {
for(x = 0; x < pitch; x++) for(x = 0; x < pitch && x < ft_face->glyph->bitmap.width; x++)
{ if (src[x / 8] & (1 << ( (7 - (x % 8))))) dst[x] = 0xff;
if(x < ft_face->glyph->bitmap.width)
dst[x] = (src[x / 8] & (1 << ( (7 - (x % 8))))) ? 0xff : 0;
else
dst[x] = 0;
}
src += ft_face->glyph->bitmap.pitch; src += ft_face->glyph->bitmap.pitch;
dst += pitch; dst += pitch;
} }
...@@ -5025,9 +5021,10 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format, ...@@ -5025,9 +5021,10 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format,
src = ft_face->glyph->bitmap.buffer; src = ft_face->glyph->bitmap.buffer;
src_pitch = ft_face->glyph->bitmap.pitch; src_pitch = ft_face->glyph->bitmap.pitch;
height = min( height, ft_face->glyph->bitmap.rows );
while ( height-- ) while ( height-- )
{ {
for (x = 0; x < width; x++) for (x = 0; x < width && x < ft_face->glyph->bitmap.width; x++)
{ {
if ( src[x / 8] & (1 << ( (7 - (x % 8)))) ) if ( src[x / 8] & (1 << ( (7 - (x % 8)))) )
((unsigned int *)dst)[x] = ~0u; ((unsigned int *)dst)[x] = ~0u;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment