From 9f258bd6009e1ae92579cf159d81ad8c28280666 Mon Sep 17 00:00:00 2001
From: Marek Kasik <mkasik@redhat.com>
Date: Tue, 3 Aug 2010 09:27:42 +0200
Subject: [PATCH] [dvi] Test glyph->data for MDVI_GLYPH_EMPTY

MDVI marks empty glyphs by setting its data pointer to 0x1
(MDVI_GLYPH_EMPTY constant) but it doesn't check for the
emptiness sometimes. Fixes bug #600552.
---
 backend/dvi/cairo-device.c  | 4 +++-
 backend/dvi/mdvi-lib/font.c | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/backend/dvi/cairo-device.c b/backend/dvi/cairo-device.c
index 9a8ca0ea..47425cad 100644
--- a/backend/dvi/cairo-device.c
+++ b/backend/dvi/cairo-device.c
@@ -55,7 +55,9 @@ dvi_cairo_draw_glyph (DviContext  *dvi,
 
 	glyph = &ch->grey;
 
-	isbox = (glyph->data == NULL || (dvi->params.flags & MDVI_PARAM_CHARBOXES));
+	isbox = (glyph->data == NULL ||
+	         (dvi->params.flags & MDVI_PARAM_CHARBOXES) ||
+	         MDVI_GLYPH_ISEMPTY (glyph->data));
 
 	x = - glyph->x + x0 + cairo_device->xmargin;
 	y = - glyph->y + y0 + cairo_device->ymargin;
diff --git a/backend/dvi/mdvi-lib/font.c b/backend/dvi/mdvi-lib/font.c
index 2d488d62..2f655df0 100644
--- a/backend/dvi/mdvi-lib/font.c
+++ b/backend/dvi/mdvi-lib/font.c
@@ -379,10 +379,12 @@ again:
 		return ch;
 	} else if(MDVI_ENABLED(dvi, MDVI_PARAM_ANTIALIASED)) {
 		if(ch->grey.data && 
+		   !MDVI_GLYPH_ISEMPTY(ch->grey.data) &&
 		   ch->fg == dvi->curr_fg && 
 		   ch->bg == dvi->curr_bg)
 		   	return ch;
-		if(ch->grey.data) {
+		if(ch->grey.data &&
+		   !MDVI_GLYPH_ISEMPTY(ch->grey.data)) {
 			if(dvi->device.free_image)
 				dvi->device.free_image(ch->grey.data);
 			ch->grey.data = NULL;
-- 
2.43.5