diff options
author | Carl Worth <cworth@cworth.org> | 2005-08-18 23:10:37 +0000 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2005-08-18 23:10:37 +0000 |
commit | 435fb3c65f3edd7687a332f274545abf7e601965 (patch) | |
tree | 602852716e048afd8573707d00ae82e7e57a8b5a /test/nil-surface.c | |
parent | 0e56f2ea0acb1f5359294b5da5f60b05673d75e3 (diff) |
Fix for bug #4088:
New function to return the current nil pattern depending on the status.
Add missing early bailout on surface->status with error propagation to the pattern.
Related cleanups for cairo_pattern_t:
Don't check other->status since this is a static function.
Add missing early bailout on other->status.
Cleanup identifier names.
Track rename of nil patterns.
Don't call _cairo_error for pre-existing errors.
Take care to initialize some fields to that _cairo_pattern_release_surface will work even after an error.
Track rename of cairo_solid_pattern_nil to cairo_pattern_nil.
New test to ensure that a file-not-found error will propagate from a surface, through a pattern, and onto a cairo_t.
Diffstat (limited to 'test/nil-surface.c')
-rw-r--r-- | test/nil-surface.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/test/nil-surface.c b/test/nil-surface.c new file mode 100644 index 00000000..335cd45f --- /dev/null +++ b/test/nil-surface.c @@ -0,0 +1,73 @@ +/* + * Copyright © 2005 Red Hat, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation, and that the name of + * Red Hat, Inc. not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. Red Hat, Inc. makes no representations about the + * suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL, + * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR + * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Author: Carl D. Worth <cworth@cworth.org> + */ + +#include "cairo-test.h" +#include <cairo-ft.h> + +/* Test case for: https://bugs.freedesktop.org/show_bug.cgi?id=4088 */ + +cairo_test_t test = { + "nil-surface", + "Test that nil surfaces do not make cairo crash.", + 1, 1 +}; + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_surface_t *surface; + cairo_pattern_t *pattern; + cairo_t *cr2; + + /* Make a custom context to not interfere with the one passed in. */ + cr2 = cairo_create (cairo_get_target (cr)); + + /* First, let's make a nil surface. */ + surface = cairo_image_surface_create_from_png ("___THIS_FILE_DOES_NOT_EXIST___"); + + /* Let the error propagate into a nil pattern. */ + pattern = cairo_pattern_create_for_surface (surface); + + /* Then let it propagate into the cairo_t. */ + cairo_set_source (cr2, pattern); + cairo_paint (cr2); + + cairo_pattern_destroy (pattern); + cairo_surface_destroy (surface); + + /* Check that the error made it all that way. */ + if (cairo_status (cr2) != CAIRO_STATUS_FILE_NOT_FOUND) + return CAIRO_TEST_FAILURE; + + cairo_destroy (cr2); + + return CAIRO_TEST_SUCCESS; +} + +int +main (void) +{ + return cairo_test (&test, draw); +} |