cairo release 1.4.4 now available

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

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 pixman
      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" warnings
      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->next is initialized
      [cairo-pattern] Make sure cached solid patterns are not put in error status
      [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_group!
      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 "cairoint.h"
      [src] Make sure all source files #include "cairoint.h" as their first include
      [pixman/src/] Test that all source files #include <config.h>
      [] 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 initializes
      [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 inconsitency
      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 StudlyCaps
      Add assertion check to quiet warn_unused_result warning.
      Add missing error check of return value of _cairo_path_fixed_close_path
      test-meta-surface: Add missing checks for errors from _cairo_meta_surface_replay
      test-meta-surface: Add missing check for error from _cairo_surface_get_extents
      cairo-truetype-subset: Check resturn value from _cairo_array_append and 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 pointer, not a Boolean value
      _cairo_gstate_ensure_scaled_font: Add missing propagation for error hiding inside the scaled_font
      cairo_pattern_set_matrix: Validate that matrix is invertible
      test/invalid-matrix: Add new test to exercise CAIRO_STATUS_INVALID_MATRIX paths
      Assert that cairo_matrix_invert succeeds rather than ignoring tis return 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_destroy
      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-boilerplate.c
      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 9b53bc7c6585db7ae647bb992fb9817d7bd75b38.
      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 errors
      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_insert.
      cairo-xlib-surface - propagate status returns.
      Return the correct status from _cairo_pen_stroke_spline().
      Do not overwrite cr->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->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->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 operations (#5777)

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

Kristian Høgsberg (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://hasselmm git freedesktop org/git/cairo
      Move struct pixman_region16 to pixman.h
      Make pixman_region_{init,uninit} public
      Make region of cairo_clip_t static
      Make sure clip->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

Attachment: pgpd47nx0IErT.pgp
Description: PGP signature

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]