[librsvg: 6/16] Add test for the billion-laughs equivalent from issue #515



commit 2151b3b9bff277543b39a77054b9f0291b42a790
Author: Federico Mena Quintero <federico gnome org>
Date:   Thu Oct 10 19:28:26 2019 -0500

    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)".

 tests/errors.c                                     |  17 ++-
 .../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


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