[cairo] Patch for cairo-win32-font.c, when GetTextMetrics fails

Patrick Fritzsch Patrick.Fritzsch at cib.de
Mon Nov 9 07:18:17 PST 2015


attached is a patch for cairo-win32-font.c, which fixed an issue with a problematic font on windows I had during printing a pdf document on cairo (not using poppler).

Cairo uses the winapi GetTextMetrics function, but didn’t check, if the function succeeded. See
https://msdn.microsoft.com/de-de/library/windows/desktop/dd144941(v=vs.85).aspx – it can fail.

If the function fails, windows doesn’t fill the struct, which was given to GetTextMetrics and its values are kept uninitialized – so cairo went depending on a random effect into different parts of code afterwards (symbol fonts / non symbol fonts) and didn’t make a clean error.

Because the font, which fails for GetTextMetrics function, is from a customer document and I don’t have the right to provide the stuff to the outside, I cannot supply it to this list. But it is a reduced truetype font, which contains only a .notdef glyph and one additional glyph, which doesn’t have any contours, mapped to a space.

When Cairo fails internally for any reason it set sets an error code inside the context – and all content later, which i want to output on this context isn’t processed anymore. In above case it works, that I ignore that error-setting and process the rest of the document.
So how can I achieve, that when I left the erroneous state inside the context, that it works again? I miss something like a cairo_reset_error function.

Best regards,


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cairographics.org/archives/cairo/attachments/20151109/04f80227/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cairo-win32-font.patch
Type: application/octet-stream
Size: 901 bytes
Desc: cairo-win32-font.patch
URL: <http://lists.cairographics.org/archives/cairo/attachments/20151109/04f80227/attachment-0001.obj>

More information about the cairo mailing list