Inkscape currently crashes on win32 when printing with the following error, see [1] for details: Assertion failed! Program: E:\Temp\Inkscape\inkscape.git\trunk\build64\inkscape\inkscape.exe File: ../../cairo-1.15.6/src/cairo-recording-surface.c, Line 608 Expression: ! surface->unbounded While trying to debug this I found a recent commit [2] addressing a similar issue which was reported on the mailing list [3]. Investigating further I found the same code which [2] replaced in a second location in the affected file. Out of desperation I tried to apply the patch here, too (see attached patch) and what can I say - Inkscape doesn't crash anymore and prints correctly! I honestly have no experience with cairo whatsoever and don't really know what I did here, but I hope somebody can check if my change makes any sense and whether it's a correct fix for the issue I was seeing. [1] https://bugs.launchpad.net/inkscape/+bug/1665768 [2] https://cgit.freedesktop.org/cairo/commit/?id=90d50cd92315d6760069ad8062aba5e297370b20 [3] https://lists.cairographics.org/archives/cairo/2016-June/027445.html
Created attachment 132752 [details] [review] patch which fixes printing on win32 and avoids the unbounded surface assertion error
Adrian, could you comment on this? I don't understand the attached patch nor https://cgit.freedesktop.org/cairo/commit/?id=90d50cd92315d6760069ad8062aba5e297370b20 __cairo_surface_is_recording checks if surface->backend->type is CAIRO_SURFACE_TYPE_RECORDING while both patches check surface->type instead. Why/how do we end up having recording surfaces which have a non-recording backend? Why does _cairo_surface_is_recording not recognize them? Wouldn't it be better to fix this function instead?
Patch looks goods. From memory it was something to do with cairo_surface_is_recording() not recognizing snapshots of recordings as a recording surface.
Thanks for review! In this case I feel safe to use a patched build of cairo until this makes it into a release. I found one additional use of _cairo_surface_is_recording in function surface_pattern_supported: https://cgit.freedesktop.org/cairo/tree/src/win32/cairo-win32-printing-surface.c#n338 Should this one be patched, too, then?
> I found one additional use of _cairo_surface_is_recording in function > surface_pattern_supported: > https://cgit.freedesktop.org/cairo/tree/src/win32/cairo-win32-printing- > surface.c#n338 > Should this one be patched, too, then? I think so. I don't have a windows build environment setup to test it.
Created attachment 133001 [details] [review] patch v2 So here's the patch with both occurrences replaced. Is there anything else I can do on my end at this time?
I am still curious about the questions Uli mentioned in comment #2. If the backend for the snapshotted surface is not CAIRO_SURFACE_TYPE_RECORDING, what is it? Would it be possible to fix _cairo_surface_is_recording to properly test for that?
-- GitLab Migration Automatic Message -- This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/cairo/cairo/issues/131.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.