[cairo-bugs] [Bug 49719] Assert failures in cairo-surface.c on Ubuntu 11.10/12.04
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Thu May 10 11:55:34 PDT 2012
https://bugs.freedesktop.org/show_bug.cgi?id=49719
--- Comment #12 from Uli Schlachter <psychon at znc.in> 2012-05-10 11:55:34 PDT ---
Let me quote the (shortened) source:
void
cairo_surface_set_device_offset (cairo_surface_t *surface, double x_offset,
double y_offset)
{
cairo_status_t status;
if (unlikely (surface->status))
return;
[...]
surface->device_transform.x0 = x_offset;
surface->device_transform.y0 = y_offset;
surface->device_transform_inverse = surface->device_transform;
status = cairo_matrix_invert (&surface->device_transform_inverse);
/* should always be invertible unless given pathological input */
assert (status == CAIRO_STATUS_SUCCESS);
[...]
}
You can see different things:
- This function doesn't do anything on error surface (=> cairo correctly
ignores operations on error surfaces)
- The only assert() in there has a comment which says "it's virtually
impossible for this to fail"
I agree with this assert(). The device_transform should always be a translation
matrix and those are always invertible. So unless I missed something, this
leaves "random memory corruption" as the most likely case for this assert() to
trigger (and debugging random memory corruption is hard and most likely not a
bug in cairo).
Also, this is why I asked for someone to ask gdb which values the
device_transform contains after a crash.
--
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA Contact for the bug.
More information about the cairo-bugs
mailing list