Trying to reproduce bug #97938

Submitted by Alessandro Vesely on Oct. 5, 2016, 6:25 p.m.

Details

Message ID 1475691951-30892-1-git-send-email-vesely@tana.it
State New
Headers show
Series "Trying to reproduce bug #97938" ( rev: 1 ) in Pixman

Not browsing as part of any series.

Commit Message

Alessandro Vesely Oct. 5, 2016, 6:25 p.m.
See https://bugs.freedesktop.org/show_bug.cgi?id=97938

I'm not sure the image I pass is valid; if not, that would be a Cairo
bug or something in between.  Tomorrow I'll send more patches.

Ciao
Ale

Signed-off-by: Alessandro Vesely <vesely@tana.it>
---
 test/large-test.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 test/large-test.c

Patch hide | download patch | download mbox

diff --git a/test/large-test.c b/test/large-test.c
new file mode 100644
index 0000000..bf9095a
--- /dev/null
+++ b/test/large-test.c
@@ -0,0 +1,77 @@ 
+#include <stdlib.h>
+#include "utils.h"
+
+#if 0
+static void
+on_destroy (pixman_image_t *image, void *data)
+{
+    free (data);
+}
+
+pixman_image_set_destroy_function (image, on_destroy, orig);
+#endif
+
+static pixman_image_t *
+make_image (pixman_format_code_t format, size_t width, size_t height)
+{
+    uint32_t *bytes, *orig;
+    pixman_image_t *image;
+    int stride;
+
+    size_t size = width * height * 4UL;
+    orig = bytes = calloc (1, size);
+    if (!orig)
+    {
+    	puts("failed");
+    	return NULL;
+    }
+    prng_randmemset (bytes, size, 0);
+
+    stride = width * 4;
+    image = pixman_image_create_bits (
+	format, width, height, bytes, stride);
+
+    pixman_image_set_repeat (image, PIXMAN_REPEAT_NONE);
+
+    image_endian_swap (image);
+    return image;
+}
+
+static uint32_t
+run_test(int testnum, int verbose)
+{
+    static const pixman_transform_t transform =
+	{{{2476867, 0, 84}, {0, 2476867, 44980853}, {0, 0, 65536}}};
+
+    pixman_image_t *src, *mask, *dest;
+
+    prng_srand(testnum);
+
+    /*
+    * This is meant to be similar to a call from
+    * cairo-1.14.0/src/cairo-image-compositor.c:2496
+    */
+    src = make_image(PIXMAN_a8r8g8b8, 19866, 28087);
+    pixman_image_set_transform (src, &transform);
+    mask = make_image(PIXMAN_a8, 528, 32);
+    dest = make_image(PIXMAN_a8r8g8b8, 526, 32);
+    pixman_image_composite32(PIXMAN_OP_SRC,
+                             src,
+                             mask,
+                             dest,
+                             0     /* src_x  */,
+                             693   /* src_y  */,
+                             0     /* mask_x */,
+                             0     /* mask_y */,
+                             0     /* dest_x */,
+                             0     /* dest_y */,
+                             525   /* width  */,
+                             32    /* height */);
+    return 1;
+}
+
+int
+main (int argc, const char *argv[])
+{
+    return fuzzer_test_main ("large", 1, 1, run_test, argc, argv);
+}