[cairo] segment fault when rendering text with space charactors
onto glitz surface.
sunmoon1997
sunmoon1997 at gmail.com
Tue Aug 9 23:48:00 PDT 2005
Vladimir Vukicevic wrote:
>On 8/9/05, David Reveman <davidr at novell.com> wrote:
>
>
>>On Tue, 2005-08-09 at 09:51 -0700, Vladimir Vukicevic wrote:
>>
>>
>>>Here's an updated patch for this issue, as well as not initializing
>>>the memory entry member (I sent both patches separately earlier, this
>>>is both combined and updated to latest CVS). Carl/David, let me know
>>>if it's ok to commit this..
>>>
>>>
>>It's OK commit it.
>>
>>I'm not sure the:
>>(area == &_empty_area)
>>check is necessary as the code should never try top move in areas with
>>width == 0 or height == 0 but I might be wrong so it's OK to commit it
>>as it is, I'll change it later if it turns out not necessary.
>>
>>
>
>Hmm, so applying this patch to current CVS (with my patch checked in)
>still caused a slightly different crash with 0-space characters. The
>attached patch fixes it, but at this point I'm just playing
>whack-a-mole without a full understanding of the glitz glyph caching
>implementation... in any case I'd like to check the patch in, since
>text seems to render with it, but I have no idea about the correctness
>-- specifically, I'm not sure why we ever have an image_entry->image
>for a space character. The move_in check isn't needed with this...
>
> - Vlad
>
>
>------------------------------------------------------------------------
>
>Index: cairo-glitz-surface.c
>===================================================================
>RCS file: /cvs/cairo/cairo/src/cairo-glitz-surface.c,v
>retrieving revision 1.57
>diff -u -8 -p -r1.57 cairo-glitz-surface.c
>--- cairo-glitz-surface.c 9 Aug 2005 20:42:54 -0000 1.57
>+++ cairo-glitz-surface.c 9 Aug 2005 21:25:11 -0000
>@@ -1261,19 +1261,16 @@ struct _cairo_glitz_root_area {
> cairo_glitz_area_t *area;
> const cairo_glitz_area_funcs_t *funcs;
> };
>
> static cairo_status_t
> _cairo_glitz_area_move_in (cairo_glitz_area_t *area,
> void *closure)
> {
>- if (area == &_empty_area)
>- return CAIRO_STATUS_SUCCESS;
>-
> area->closure = closure;
> area->state = CAIRO_GLITZ_AREA_OCCUPIED;
>
> return (*area->root->funcs->move_in) (area, area->closure);
> }
>
> static void
> _cairo_glitz_area_move_out (cairo_glitz_area_t *area)
>@@ -1780,17 +1777,18 @@ _cairo_glitz_cache_glyph (cairo_glitz_gl
> int am, rm, gm, bm;
>
> entry->size = image_entry->size;
>
> if (entry->size.width > GLYPH_CACHE_MAX_WIDTH ||
> entry->size.height > GLYPH_CACHE_MAX_HEIGHT)
> return CAIRO_STATUS_SUCCESS;
>
>- if (!image_entry->image)
>+ if ((entry->size.width == 0 && entry->size.height == 0) ||
>+ !image_entry->image)
> {
> entry->area = &_empty_area;
> return CAIRO_STATUS_SUCCESS;
> }
>
> format = pixman_image_get_format (image_entry->image->pixman_image);
> if (!format)
> return CAIRO_STATUS_NO_MEMORY;
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>cairo mailing list
>cairo at cairographics.org
>http://lists.freedesktop.org/mailman/listinfo/cairo
>
>
Hi,
This patch doesn't fix the problem completely. My test program still
get segment fault. I attach a small patch to complete the fix.
Many thanks.
Jinghua Luo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cairo-glitz-surface.diff
Type: text/x-patch
Size: 623 bytes
Desc: not available
Url : http://lists.freedesktop.org/archives/cairo/attachments/20050810/c55b42a0/cairo-glitz-surface.bin
More information about the cairo
mailing list