Source code

Revision control

Copy as Markdown

Other Tools

diff --git a/src/sfnt/ttcolr.c b/src/sfnt/ttcolr.c
--- a/src/sfnt/ttcolr.c
+++ b/src/sfnt/ttcolr.c
@@ -1862,7 +1862,11 @@
alpha = face->palette[color_index].alpha;
}
- /* XXX Convert if srcSlot.bitmap is not grey? */
+ /* Reject pixel modes other than GRAY/MONO. */
+ if ( srcSlot->bitmap.pixel_mode != FT_PIXEL_MODE_GRAY &&
+ srcSlot->bitmap.pixel_mode != FT_PIXEL_MODE_MONO )
+ return FT_Err_Invalid_Glyph_Format;
+
src = srcSlot->bitmap.buffer;
dst = dstSlot->bitmap.buffer +
dstSlot->bitmap.pitch * ( dstSlot->bitmap_top - srcSlot->bitmap_top ) +
@@ -1872,7 +1876,9 @@
{
for ( x = 0; x < srcSlot->bitmap.width; x++ )
{
- int aa = src[x];
+ int aa = srcSlot->bitmap.pixel_mode == FT_PIXEL_MODE_MONO
+ ? ( src[x >> 3] & ( 0x80 >> ( x & 7 ) ) ) ? 255 : 0
+ : src[x];
int fa = alpha * aa / 255;
int fb = b * fa / 255;