diff options
author | Carl Worth <cworth@cworth.org> | 2006-09-21 15:13:47 -0700 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2006-11-02 13:02:03 -0800 |
commit | 16a08ff1b03a7fc110dc3359f030ea6ff8af03a7 (patch) | |
tree | 0581e448a56d9b8bb0ed5b039d350033108067a8 | |
parent | 459223945e0e974e4de7ae158d0a218c67434add (diff) |
Add test case from bug #8379 demonstrating infinite loop during round join
(cherry picked from 8744929030ed8d42c271d9abb202975f62de166c commit)
-rw-r--r-- | test/Makefile.am | 1 | ||||
-rw-r--r-- | test/infinite-join.c | 73 |
2 files changed, 74 insertions, 0 deletions
diff --git a/test/Makefile.am b/test/Makefile.am index 335a70c82..a5ce1c34d 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -38,6 +38,7 @@ glyph-cache-pressure \ get-and-set \ get-group-target \ gradient-alpha \ +infinite-join \ leaky-dash \ leaky-polygon \ line-width \ diff --git a/test/infinite-join.c b/test/infinite-join.c new file mode 100644 index 000000000..fffb38615 --- /dev/null +++ b/test/infinite-join.c @@ -0,0 +1,73 @@ +/* + * Copyright © 2006 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 the + * copyright holders not be used in advertising or publicity + * pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied + * warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS 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> + */ + +/* Test case for bug #8379: + * + * infinite loop when stroking + * https://bugs.freedesktop.org/show_bug.cgi?id=8379 + */ + +#include "cairo-test.h" + +static cairo_test_draw_function_t draw; + +cairo_test_t test = { + "infinite-join", + "Test case for infinite loop when stroking with round joins", + 120, 70, + draw +}; + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND); + + /* scaling 2 times causes a slight rounding error in the ctm. + * Without that, the bug doesn't happen. */ + cairo_scale (cr, 20 / 100., 20 / 100.); + cairo_scale (cr, 1. / 20, 1. / 20); + + cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND); + cairo_set_line_width (cr, 20); + + cairo_new_path (cr); + cairo_move_to (cr, 18928, 13843); + cairo_line_to (cr, -6928, 13843); + cairo_line_to (cr, -6928, -6842); + cairo_line_to (cr, 18928, -6842); + cairo_line_to (cr, 18928, 13843); + cairo_stroke (cr); + + return 0; +} + +int +main (void) +{ + return cairo_test (&test); +} |