cairo release 1.4.4 now available
Posted on: 04/15/2007 11:49 AM

A new cairo release 1.4.4 is now available from:

which can be verified with:
71a7ce8352500944f7b2b73d4dc25ee947ec56ec cairo-1.4.4.tar.gz
(signed by Carl Worth)

Additionally, a git clone of the source tree:

git clone git://

will include a signed 1.4.4 tag which points to a commit named:

which can be verified with:
git verify-tag 1.4.4

and can be checked out with a command such as:
git checkout -b build 1.4.4

This is the second update release in cairo's stable 1.4 series. It comes just less than a month after 1.4.2. The changes since 1.4.2 consist primarily of bug fixes, but also include at least one optimization. See below for details.

Thanks, and have fun with cairo!


There have been lots of individuals doing lots of great work on cairo, but two efforts during the 1.4.4 series deserve particular mention:

Internal cleanup of error handling, (Chris Wilson)
Chris contributed a tremendous series of patches (74 patches!) to improve cairo's handling of out-of-memory and other errors. He began by adding gcc's warn_unused_attribute to as many functions as possible, and then launched into the ambitious efforts of adding correct code to quiet the dozens of resulting warnings.

Chris also wrote a custom valgrind skin to systematically inject malloc failures into cairo, and did all the work necessary to verify that cairo's performance test suite runs to completion without crashing.

The end result is a much more robust implementation. Previously, many error conditions would have gone unnoticed and would have led to assertion failures, segmentation faults, or other harder-to-diagnose problems. Now, more than ever, cairo should cleanly let the user know of problems through cairo_status and other similar status functions. Well done, Chris!

More malloc reduction, (Mathias Hasselmann)
After 1.4.0, Behdad launched an effort to chase down excessive calls to malloc within the implementation of cairo. He fixed a lot of malloc-happy objects for 1.4.2, but one of the worst offenders, (pixman regions), was left around. Mathias contributed an excellent series of 15 patches to finish off this effort.

The end result is a cairo that calls malloc much less often than it did before. Compared to 1.4.2, 55% of the calls to malloc have been eliminate, (and 60% have been eliminated compared to 1.4.0). Well done, Mathias!

Other improvements since 1.4.2
- Centralize mutex declarations (will reduce future build breaks),
(Chris Wilson)

- Reduce malloc by caching recently freed pattern objects (Chris

- Fix some broken composite operations (David Reveman)

Backend-specific fixes
- Use TJ operator for more compact representation of glyphs (Adrian

- Fix glyph positioning bug when glyphs are not horizontal

- Fix crash when rendering with bitmap fonts (Carl Worth)

- Turn metrics-hinting on by default (Behdad Esfahbod)

- Fix edge-effect problem with transformed images drawn to xlib
(Behdad Esfahbod)

- Avoid dereferencing a NULL screen. (Chris Wilson)

- Fix scaling of glyph surfaces
(Brian Ewins)

- Fix compilation failure when both xlib and quartz enabled
(Brian Ewins)

- Fix rounding bug leading to incorrectly positioned glyphs
(Robert O'Callahan)

Summary of all changes from 1.4.2 to 1.4.4
Adrian Johnson (3):
PDF: Use the TJ operator to show glyphs
PS: Remove unused variable
PDF: Fix glyph positioning bug when glyphs are not horizontal

Behdad Esfahbod (52):
[cairo-mutex] Rename _xlib_screen_mutex to _cairo_xlib_screen_mutex
[] Define PIXMAN_CFLAGS, to pass -fno-strict-aliasing to
Include cairo-mutex-private.h in test backends
Oops. Remove cairo-mutex-private.h include from test surfaces
[cairo-path-fixed] Fix "comparison between signed and unsigned" warni
Define and use ARRAY_LEN
Fix file permissions again
[cairo-gstate] Move save/restore logic into gstate instead of cairo_t
[cairo-gstate] Make sure gstate-gt;next is initialized
[cairo-pattern] Make sure cached solid patterns are not put in error
[cairo-path] Don't access gstate members directly
[cairo.c] Don't access gstate members directly
[test/nil-surface] Test cairo_create(NULL). Crashing in cairo_push_g
cairo_push/pop_group(), bail out if cairo_t is in error status
[test/nil-surface] Test that cairo_get_target() returns non-NULL
[] Add --enable-test-surfaces to configure flags
[pdiff] Make stdint.h inclusion portable (#10441)
[test] Make pdf2svg build (and distributed)
[doc] Update
[] Bump version up to 1.4.3, oops!
[test] Add svg2pdf
Make sure all nil objects start with _cairo_
[pixman] Cleanup inline mess (#10150)
[cairoint.h] Remove inline definition for MS compilers
[pixman] Make sure all source files include config.h
[src/check-cairoint.h] Test to check that all source files #include "
[src] Make sure all source files #include "cairoint.h" as their first
[pixman/src/] Test that all source files #include lt;con
[] Distribute BIBLIOGRAPHY
[ROADMAP] Move David Turner's cairo-ft rewrite to 1.6.
[TODO] Add 4945 Cairo doesn't support 8-bit pseudocolor visuals
[pixman-image] Simply initialization given that there is no clip
Rename pixman_region_uninit to pixman_region_fini
[test,perf] Make them rebuild boilerplate when src is changed
[cairo-skiplist] Clarify MAX_LEVEL in comment, and adjust accordingly
Add references to the skiplist paper
[cairo-skiplist] Group levels two-by-two in freelists
[cairo-skiplist] Reduce MAX_LEVEL from 31 to 15
[cairo-skiplist] Use one random number per insertion, instead of two
[pdiff] Ship gpl.txt
[test] Add copyright headers for my tests
[ROADMAP] Mark done items
[pixman] Mark some small functions that are called per-pixel inline
[test] Disable text-glyph-range that was crashing
[ROADMAP] Mark bug #5777 as fixed
[ROADMAP] Add cairo_object_t
[xlib] Turn metrics-hinting on by default
[image] Set hint-metrics on in default font options
[cairo-surface] Make sure cairo_surface_get_font_options() fully init
[cairo-pattern] Add a TODO item to code
[cairo-pattern] Slightly hackish fix for bug #10508
[ROADMAP] Put back bug 10508 into 1.4.4 roadmap and mark it fixed

Benjamin Berg (1):
Fix typo in cairo_arc_negative() docs (#10497)

Brian Ewins (4):
[atsui] fix scaling of glyph surfaces (#9568)
[quartz] fix order of fields in matrix conversion
[test/degenerate-path] remove quartz reference image
[boilerplate] split quartz out to avoid symbol clash.

Carl Worth (67):
Move misplaced CLEANUP_FONT label to avoid crash.
ROADMAP/TODO: Update with 1.4.4 and 1.6 items from recent meeting
Make _cairo_gstate_identity_matrix void
Make _cairo_gstate_user_to_device (and friends) void.
Make _cairo_pen_init_empty void
Make _cairo_matrix_compute_scale_factors void
Make _cairo_path_bounder_add_point void
Cleanup multi-line if condition
Add a couple of missing newline characters
ATSUI: Fix broken error checks for NULL surface
Fix an incorrectly indented condition
Prefer FALSE over 0 for initializing a cairo_bool_t value
Invert condition to more intuitive form.
Add a status field to cairo_polygon_t
Add missing error checking to _trace_mask_to_path
Fix cairo_traps_t status handling
Fix mis-indented _cairo_traps_init_box
Fix mis-indented _cairo_dtostr
_cairo_output_stream_vprintf: Add assertion to detect internal incons
Change _cairo_dtostr to have a void return type
Make _cairo_clip_reset void
PS: Add missing error checks for _cairo_output_stream_destroy
PDF: Check return value of _cairo_output_stream_destroy and propagate
Rename _cairo_pdf_surface_emit_toUnicode_stream to eliminate StudlyCa
Add assertion check to quiet warn_unused_result warning.
Add missing error check of return value of _cairo_path_fixed_close_pa
test-meta-surface: Add missing checks for errors from _cairo_meta_sur
test-meta-surface: Add missing check for error from _cairo_surface_ge
cairo-truetype-subset: Check resturn value from _cairo_array_append a
nd propagate
cairo-truetype-subset: Fix missing error propagation
paginated: Fix missing errors checks for _cairo_meta_surface_replay
Fix indentation of CLEANUP_IMAGE label.
test-meta-surface.c: Fix memory leak on error recovery path.
paginated: Add missing error check for _cairo_surface_get_extents
paginated: Add missing error check for _cairo_surface_show_page
Fix cairo_scaled_font_create to return a nil scaled font, not NULL
_cairo_scaled_font_init: Detect an invalid matrix and return an error.
Check (and assert) return values of cairo_matrix_invert
_cairo_gstate_ensure_scaled_font: Prefer to treat a pointer as a poin
ter, not a Boolean value
_cairo_gstate_ensure_scaled_font: Add missing propagation for error h
iding inside the scaled_font
cairo_pattern_set_matrix: Validate that matrix is invertible
test/invalid-matrix: Add new test to exercise CAIRO_STATUS_INVALID_MA
TRIX paths
Assert that cairo_matrix_invert succeeds rather than ignoring tis ret
urn value
PS: Add missing checks for return value of _cairo_pattern_get_extents
PS: Add missing check for return value of _cairo_meta_surface_replay
PDF: Added error checking and propagation for _cairo_array_append
SVG: Add missing error checks and propagation
SVG: Add missing error checking for calls to _cairo_output_stream_des
boilerplate: Add error checking for cairo_surface_set_user_data
boilerplate: Add error checking for cairo_surface_write_to_png
Merge branch 'warn-unused-result' into cairo
cairo-truetype-subset.c: Add missing error checks and propagation
Merge cached-scaled-font-in-error into cairo
Merge branch 'master' of into cairo
move show-glyphs-many to the DISABLED_TESTS list
Rename cairo-mutex-list.h to cairo-mutex-list-private.h
Rebuild doc/public/
Revert cairo_public_warn addition to cairo.h
Remove ft-text-vertical-layout-type1
Fix typo in loop control for computation of std. deviation
Punt bug #10508 off of 1.4.4
boilerplate: Cleanup conditional compilation ofcairo-quartz-boilerpla
cairo-perf-diff: Use median not minimum to report differences
AUTHORS: Update descriptions for Mathias Hasselmann and Chris Wilson
NEWS: Add notes for cairo 1.4.4
Increment version to 1.4.4 (and library versioning to 13:2:11)

Chris Wilson (74):
Cache solid patterns
[cairo-surface] Use a stack buffer for small numbers of rectangles
Back out the solid-pattern-cache from 9b53bc7c6585db7ae647bb992fb9817
Destroy the current pattern before replacing with cairo_set_source().
[] Borrow version comparison from GNOME (#9566)
Restore gcov functionality
Propagate one error return through pdf.
Protect boilerplate_xlib_synchronize from alloc failure.
_get_bitmap_surface - check for calloc failure
Add attribute(warn_unused_result)
cairo-boilerplate - handle failure to set user data
cairo-clip - handle trivial pixman failures
cairo-ft-font - handle trivial failures
cairo-gstate - fix the trivial unchecked returns
cairo-image-surface - propagate error returns from pixman.
cairo-meta-surface - propagate trivial status return
cairo-paginated-surface - fix up the trivial unused result
cairo-path-fill - trivial missing unused result
cairo-path - check for failure during _cairo_path_fixed_interpret
cairo-pattern - propagate status
cairo-pdf-surface - propagate error status
cairo-pen - trivial propagation of error status
cairo-polygon - trivial propagation of error status
cairo-ps-surface - add a couple of status checks
cairo-surface-fallback - propagate error returns
cairo-svg-surface - propagate error returns
cairo-type1-fallback - check for an error during cleanup
cairo - add missing status checks
buffer-diff - check for any errors whilst writing the png
cairo-path-stroke - add trivial missing status checks
cairo-bentley-ottmann/skip-list - catch and propagate out-of-memory e
cairo-pen - cairo_pen_init() can fail propagate its error.
cairo-svg-surface - propagate some error returns
cairo-type1-fallback - propagate error returns
cairo-bentley-ottmann - check init for failure
Reset cairo_scaled_font_map after freeing.
Handle failure to allocate a GC.
Avoid using substituted surfaces for xlib operations.
Check for error whilst trying to advance along a text string.
Detect failure to allocate glyphs during _cairo_scaled_font_init()
Reorder cleanup cairo_xlib_surface_show_glyphs()
Remove the entry if we return an error code during _cair_hash_table_i
cairo-xlib-surface - propagate status returns.
Return the correct status from _cairo_pen_stroke_spline().
Do not overwrite cr-gt;status
Initialise cairo_spline_t to use its embedded buffer.
Free the pixman_image if we fail to wrap it with a surface.
Correct handling of a malloc failure during pattern_create_in_error()
Free the bitmap-gt;buffer on failure
Fix detection of FcFini().
Implement clone_surface for test-fallback-surface.
pixman region operations can fail, propagate the error.
Disable warnings for cairo_*_reference functions.
Provide a private entry point for cairo_scaled_font_status().
Propagate region failures during pixman_image_set_clip_region().
FbClipImage* should check for errors during region operations.
Propagate region errors from pixman_color_rects().
Propagate errors up through pixman_composite_trapezoids()
Unexport fbSolidFillmmx and fbCopyAreammx.
Use find | xargs to overcome shell command line limit.
_pixman_create_source_image() - check for malloc failure
Only enable warn-unused-result for recent gcc
Define cairo_public_warn in terms of cairo_public.
Mark function tables with attribute(warn_unused_result)
Don't return scaled fonts in the error state from the cache.
Move pixman_format_t from heap to stack allocations.
Avoid using GNU find extensions.
Check for find and xargs during configure
Do not raise an error if we fail to locate 'find' or 'xargs'
cairo-xlib-screen - avoid dereferencing a NULL screen.
cairo_xlib_screen_info_t - always perform an exact match
cairo_xlib_close_display - drop the mutex whilst calling the hooks
Hold the scaled_font-gt;mutex whilst operating on the shared members.
Add a reference count to cairo_xlib_screen_info_t

David Reveman (1):
[pixman] Fix fbcompose.c that was broken for some composite operation
s (#5777)

Jeff Smith (1):
[cairo-output-stream] Remove use of strtol

Kristian H=C3=B8gsberg (1):
Add missing copyright notice.

Mathias Hasselmann (20):
Initialize mutexes at central location.
Remove _global_image_glyph_cache_mutex which is not used anymore.
Move declaration of cairo_mutex_t to cairo-mutex-private.h
Merge branch 'master' of git+ssh://
Move struct pixman_region16 to pixman.h
Make pixman_region_{init,uninit} public
Make region of cairo_clip_t static
Make sure clip-gt;region is always initialized
Avoid malloc in _cairo_region_create_from_rectangle
Avoid pixman_region_create in _cairo_traps_extract_region
Remove redundant _cairo_clip_fini function
Avoid pixman_create_region in glitz-surface
Replace pixman_region_create_simple by pixman_region_init
Avoid pixman_region_create in pixman_color_rects
Make clip regions of pixman_image_t static
Avoid pixman_region_create in pixman_composite{,General}
Make clientClip region static, remove abdoned CT_PIXMAP code paths
Remove abdoned pixman_region_{create,destroy}
Update function map
[pixman-region] Separate pixman_region_init

Michael Emmel (2):
Fixed compile error from missing directfb.h include
Merge branch 'master' of ssh+git://

Robert O'Callahan (1):
[quartz] fix floating point precision issue (#10531)

Vladimir Vukicevic (1):
add licenses to test files

Printed from Linux Compatible (