diff options
author | Federico Mena Quintero <federico@gnome.org> | 2019-10-10 19:28:26 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2019-10-10 19:28:26 -0500 |
commit | 2151b3b9bff277543b39a77054b9f0291b42a790 (patch) | |
tree | 76dcef575f0ae01cfe852e102d5ee6ed27e453c6 /tests | |
parent | 7fb5175d7dd15776dbef96214b41a478776cfae5 (diff) | |
download | librsvg-2151b3b9bff277543b39a77054b9f0291b42a790.tar.gz |
Add test for the billion-laughs equivalent from issue #515
This is billion-laughs, but done with elements inside <pattern>. They
in turn reference a fill="url(#next_sublevel_pattern)".
Diffstat (limited to 'tests')
-rw-r--r-- | tests/errors.c | 17 | ||||
-rw-r--r-- | tests/fixtures/errors/515-pattern-billion-laughs.svg | 130 |
2 files changed, 144 insertions, 3 deletions
diff --git a/tests/errors.c b/tests/errors.c index b76974db..7bf72485 100644 --- a/tests/errors.c +++ b/tests/errors.c @@ -40,9 +40,10 @@ test_non_svg_element (void) } static void -test_instancing_limit (void) +test_instancing_limit (gconstpointer data) { - char *filename = get_test_filename ("323-nested-use.svg"); + const char *basename = data; + char *filename = get_test_filename (basename); RsvgHandle *handle; GError *error = NULL; cairo_surface_t *surf; @@ -67,7 +68,17 @@ main (int argc, char **argv) g_test_init (&argc, &argv, NULL); g_test_add_func ("/errors/non_svg_element", test_non_svg_element); - g_test_add_func ("/errors/instancing_limit", test_instancing_limit); + + g_test_add_data_func_full ("/errors/instancing_limit/323-nested-use.svg", + "323-nested-use.svg", + test_instancing_limit, + NULL); + + g_test_add_data_func_full ("/errors/instancing_limit/515-pattern-billion-laughs.svg", + "515-pattern-billion-laughs.svg", + test_instancing_limit, + NULL); + return g_test_run (); } diff --git a/tests/fixtures/errors/515-pattern-billion-laughs.svg b/tests/fixtures/errors/515-pattern-billion-laughs.svg new file mode 100644 index 00000000..1cb6cbe8 --- /dev/null +++ b/tests/fixtures/errors/515-pattern-billion-laughs.svg @@ -0,0 +1,130 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="40cm" height="20cm" viewBox="0 0 800 400" version="1.1" + xmlns="http://www.w3.org/2000/svg"> + <defs> + <pattern id="z" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse" patternTransform="scale(10,10)"> + <rect x="0" y="0" width="20" height="20" fill="url(#i)" stroke="yellow"/> + </pattern> + + <pattern id="i" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse" patternTransform="scale(0.5,0.5)"> + <rect x="0" y="0" width="20" height="20" fill="url(#h)" stroke="green" /> + <rect x="1" y="1" width="20" height="20" fill="url(#h)" stroke="brown" /> + <rect x="2" y="2" width="20" height="20" fill="url(#h)" stroke="pink" /> + <rect x="3" y="3" width="20" height="20" fill="url(#h)" stroke="grey" /> + <rect x="4" y="3" width="20" height="20" fill="url(#h)" stroke="cyan" /> + <rect x="5" y="3" width="20" height="20" fill="url(#h)" stroke="green" /> + <rect x="6" y="3" width="20" height="20" fill="url(#h)" stroke="brown" /> + <rect x="7" y="3" width="20" height="20" fill="url(#h)" stroke="pink" /> + <rect x="8" y="3" width="20" height="20" fill="url(#h)" stroke="grey" /> + <rect x="9" y="3" width="20" height="20" fill="url(#h)" stroke="cyan" /> + </pattern> + + <pattern id="h" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse" patternTransform="scale(0.5,0.5)"> + <rect x="0" y="0" width="20" height="20" fill="url(#g)" stroke="green" /> + <rect x="1" y="1" width="20" height="20" fill="url(#g)" stroke="brown" /> + <rect x="2" y="2" width="20" height="20" fill="url(#g)" stroke="pink" /> + <rect x="3" y="3" width="20" height="20" fill="url(#g)" stroke="grey" /> + <rect x="4" y="3" width="20" height="20" fill="url(#g)" stroke="cyan" /> + <rect x="5" y="3" width="20" height="20" fill="url(#g)" stroke="green" /> + <rect x="6" y="3" width="20" height="20" fill="url(#g)" stroke="brown" /> + <rect x="7" y="3" width="20" height="20" fill="url(#g)" stroke="pink" /> + <rect x="8" y="3" width="20" height="20" fill="url(#g)" stroke="grey" /> + <rect x="9" y="3" width="20" height="20" fill="url(#g)" stroke="cyan" /> + </pattern> + + <pattern id="g" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse" patternTransform="scale(0.5,0.5)"> + <rect x="0" y="0" width="20" height="20" fill="url(#f)" stroke="green" /> + <rect x="1" y="1" width="20" height="20" fill="url(#f)" stroke="brown" /> + <rect x="2" y="2" width="20" height="20" fill="url(#f)" stroke="pink" /> + <rect x="3" y="3" width="20" height="20" fill="url(#f)" stroke="grey" /> + <rect x="4" y="3" width="20" height="20" fill="url(#f)" stroke="cyan" /> + <rect x="5" y="3" width="20" height="20" fill="url(#f)" stroke="green" /> + <rect x="6" y="3" width="20" height="20" fill="url(#f)" stroke="brown" /> + <rect x="7" y="3" width="20" height="20" fill="url(#f)" stroke="pink" /> + <rect x="8" y="3" width="20" height="20" fill="url(#f)" stroke="grey" /> + <rect x="9" y="3" width="20" height="20" fill="url(#f)" stroke="cyan" /> + </pattern> + + <pattern id="f" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse" patternTransform="scale(0.5,0.5)"> + <rect x="0" y="0" width="20" height="20" fill="url(#e)" stroke="green" /> + <rect x="1" y="1" width="20" height="20" fill="url(#e)" stroke="brown" /> + <rect x="2" y="2" width="20" height="20" fill="url(#e)" stroke="pink" /> + <rect x="3" y="3" width="20" height="20" fill="url(#e)" stroke="grey" /> + <rect x="4" y="3" width="20" height="20" fill="url(#e)" stroke="cyan" /> + <rect x="5" y="3" width="20" height="20" fill="url(#e)" stroke="green" /> + <rect x="6" y="3" width="20" height="20" fill="url(#e)" stroke="brown" /> + <rect x="7" y="3" width="20" height="20" fill="url(#e)" stroke="pink" /> + <rect x="8" y="3" width="20" height="20" fill="url(#e)" stroke="grey" /> + <rect x="9" y="3" width="20" height="20" fill="url(#e)" stroke="cyan" /> + </pattern> + + <pattern id="e" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse" patternTransform="scale(0.5,0.5)"> + <rect x="0" y="0" width="20" height="20" fill="url(#d)" stroke="green" /> + <rect x="1" y="1" width="20" height="20" fill="url(#d)" stroke="brown" /> + <rect x="2" y="2" width="20" height="20" fill="url(#d)" stroke="pink" /> + <rect x="3" y="3" width="20" height="20" fill="url(#d)" stroke="grey" /> + <rect x="4" y="3" width="20" height="20" fill="url(#d)" stroke="cyan" /> + <rect x="5" y="3" width="20" height="20" fill="url(#d)" stroke="green" /> + <rect x="6" y="3" width="20" height="20" fill="url(#d)" stroke="brown" /> + <rect x="7" y="3" width="20" height="20" fill="url(#d)" stroke="pink" /> + <rect x="8" y="3" width="20" height="20" fill="url(#d)" stroke="grey" /> + <rect x="9" y="3" width="20" height="20" fill="url(#d)" stroke="cyan" /> + </pattern> + + <pattern id="d" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse" patternTransform="scale(0.5,0.5)"> + <rect x="0" y="0" width="20" height="20" fill="url(#c)" stroke="green" /> + <rect x="1" y="1" width="20" height="20" fill="url(#c)" stroke="brown" /> + <rect x="2" y="2" width="20" height="20" fill="url(#c)" stroke="pink" /> + <rect x="3" y="3" width="20" height="20" fill="url(#c)" stroke="grey" /> + <rect x="4" y="3" width="20" height="20" fill="url(#c)" stroke="cyan" /> + <rect x="5" y="3" width="20" height="20" fill="url(#c)" stroke="green" /> + <rect x="6" y="3" width="20" height="20" fill="url(#c)" stroke="brown" /> + <rect x="7" y="3" width="20" height="20" fill="url(#c)" stroke="pink" /> + <rect x="8" y="3" width="20" height="20" fill="url(#c)" stroke="grey" /> + <rect x="9" y="3" width="20" height="20" fill="url(#c)" stroke="cyan" /> + </pattern> + <pattern id="c" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse" patternTransform="scale(0.5,0.5)"> + <rect x="0" y="0" width="20" height="20" fill="url(#b)" stroke="green" /> + <rect x="1" y="1" width="20" height="20" fill="url(#b)" stroke="brown" /> + <rect x="2" y="2" width="20" height="20" fill="url(#b)" stroke="pink" /> + <rect x="3" y="3" width="20" height="20" fill="url(#b)" stroke="grey" /> + <rect x="4" y="3" width="20" height="20" fill="url(#b)" stroke="cyan" /> + <rect x="5" y="3" width="20" height="20" fill="url(#b)" stroke="green" /> + <rect x="6" y="3" width="20" height="20" fill="url(#b)" stroke="brown" /> + <rect x="7" y="3" width="20" height="20" fill="url(#b)" stroke="pink" /> + <rect x="8" y="3" width="20" height="20" fill="url(#b)" stroke="grey" /> + <rect x="9" y="3" width="20" height="20" fill="url(#b)" stroke="cyan" /> + </pattern> + <pattern id="b" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse" patternTransform="scale(0.5,0.5)"> + <rect x="0" y="0" width="20" height="20" fill="url(#a)" stroke="green" /> + <rect x="1" y="1" width="20" height="20" fill="url(#a)" stroke="brown" /> + <rect x="2" y="2" width="20" height="20" fill="url(#a)" stroke="pink" /> + <rect x="3" y="3" width="20" height="20" fill="url(#a)" stroke="grey" /> + <rect x="4" y="3" width="20" height="20" fill="url(#a)" stroke="cyan" /> + <rect x="5" y="3" width="20" height="20" fill="url(#a)" stroke="green" /> + <rect x="6" y="3" width="20" height="20" fill="url(#a)" stroke="brown" /> + <rect x="7" y="3" width="20" height="20" fill="url(#a)" stroke="pink" /> + <rect x="8" y="3" width="20" height="20" fill="url(#a)" stroke="grey" /> + <rect x="9" y="3" width="20" height="20" fill="url(#a)" stroke="cyan" /> + + </pattern> + <pattern id="a" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse" patternTransform="scale(0.5,0.5)"> + <rect x="0" y="0" width="20" height="20" fill="none" stroke="green" /> + <rect x="1" y="1" width="20" height="20" fill="none" stroke="brown" /> + <rect x="2" y="2" width="20" height="20" fill="none" stroke="pink" /> + <rect x="3" y="3" width="20" height="20" fill="none" stroke="grey" /> + <rect x="4" y="3" width="20" height="20" fill="none" stroke="cyan" /> + <rect x="5" y="3" width="20" height="20" fill="none" stroke="green" /> + <rect x="6" y="3" width="20" height="20" fill="none" stroke="brown" /> + <rect x="7" y="3" width="20" height="20" fill="none" stroke="pink" /> + <rect x="8" y="3" width="20" height="20" fill="none" stroke="grey" /> + <rect x="9" y="3" width="20" height="20" fill="none" stroke="cyan" /> + </pattern> + </defs> + + <ellipse fill="url(#z)" stroke="black" stroke-width="5" + cx="400" cy="200" rx="350" ry="150" /> + +</svg>
\ No newline at end of file |