[Swfdec-commits] 2 commits - swfdec/swfdec_image.c swfdec/swfdec_pattern.c test/trace

Benjamin Otte company at kemper.freedesktop.org
Sun May 4 05:48:44 PDT 2008


 swfdec/swfdec_image.c                           |    3 +++
 swfdec/swfdec_pattern.c                         |    2 ++
 test/trace/Makefile.am                          |    9 +++++++++
 test/trace/destroyed-movie-resolve2-5.swf       |binary
 test/trace/destroyed-movie-resolve2-5.swf.trace |    1 +
 test/trace/destroyed-movie-resolve2-6.swf       |binary
 test/trace/destroyed-movie-resolve2-6.swf.trace |    1 +
 test/trace/destroyed-movie-resolve2-7.swf       |binary
 test/trace/destroyed-movie-resolve2-7.swf.trace |    1 +
 test/trace/destroyed-movie-resolve2-8.swf       |binary
 test/trace/destroyed-movie-resolve2-8.swf.trace |    1 +
 test/trace/destroyed-movie-resolve2.as          |    8 ++++++++
 12 files changed, 26 insertions(+)

New commits:
commit bd7b717db09e6f9284ba122fdd863aae2a78db34
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun May 4 14:44:35 2008 +0200

    fix crash when color-transforming masks
    
    As the mask flag is used to indicate an image surface, cached masks caused
    crashes, as they might not result in image surfaces.
    The code was changed to just not render masks but return a black pattern
    instead.
    
    I also have a test for this. But the test doesn't fail in the testsuite, as
    the testsuite only uses image surfaces. (Booo!)

diff --git a/swfdec/swfdec_image.c b/swfdec/swfdec_image.c
index f25fba7..f7745fd 100644
--- a/swfdec/swfdec_image.c
+++ b/swfdec/swfdec_image.c
@@ -666,6 +666,9 @@ swfdec_image_create_surface_transformed (SwfdecImage *image, SwfdecRenderer *ren
   g_return_val_if_fail (SWFDEC_IS_IMAGE (image), NULL);
   g_return_val_if_fail (renderer == NULL || SWFDEC_IS_RENDERER (renderer), NULL);
   g_return_val_if_fail (trans != NULL, NULL);
+  /* The mask flag is used for caching image surfaces.
+   * Instead of masking with images, code should use color patterns */
+  g_return_val_if_fail (!swfdec_color_transform_is_mask (trans), NULL);
 
   surface = swfdec_image_lookup_surface (image, renderer, trans);
   if (surface)
diff --git a/swfdec/swfdec_pattern.c b/swfdec/swfdec_pattern.c
index e0f5a1e..66ce0bd 100644
--- a/swfdec/swfdec_pattern.c
+++ b/swfdec/swfdec_pattern.c
@@ -219,6 +219,8 @@ swfdec_image_pattern_get_pattern (SwfdecPattern *pat, SwfdecRenderer *renderer,
   cairo_pattern_t *pattern;
   cairo_surface_t *surface;
   
+  if (swfdec_color_transform_is_mask (trans))
+    return cairo_pattern_create_rgb (0, 0, 0);
   surface = swfdec_image_create_surface_transformed (image->image, renderer, trans);
   if (surface == NULL)
     return NULL;
commit 356fd2eba8d299fe257ec18c8f0db434fa4c3527
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri May 2 15:48:00 2008 +0200

    add another, simpler test for the recent fix

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 99ee381..32250e8 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -930,6 +930,15 @@ EXTRA_DIST = \
 	destroyed-movie-resolve-8.swf \
 	destroyed-movie-resolve-8.swf.trace \
 	destroyed-movie-resolve.as  \
+	destroyed-movie-resolve2-5.swf \
+	destroyed-movie-resolve2-5.swf.trace \
+	destroyed-movie-resolve2-6.swf \
+	destroyed-movie-resolve2-6.swf.trace \
+	destroyed-movie-resolve2-7.swf \
+	destroyed-movie-resolve2-7.swf.trace \
+	destroyed-movie-resolve2-8.swf \
+	destroyed-movie-resolve2-8.swf.trace \
+	destroyed-movie-resolve2.as  \
 	displacement-map-filter-properties.as \
 	displacement-map-filter-properties-5.swf \
 	displacement-map-filter-properties-5.swf.trace \
diff --git a/test/trace/destroyed-movie-resolve2-5.swf b/test/trace/destroyed-movie-resolve2-5.swf
new file mode 100644
index 0000000..0f5c1cd
Binary files /dev/null and b/test/trace/destroyed-movie-resolve2-5.swf differ
diff --git a/test/trace/destroyed-movie-resolve2-5.swf.trace b/test/trace/destroyed-movie-resolve2-5.swf.trace
new file mode 100644
index 0000000..417b7b5
--- /dev/null
+++ b/test/trace/destroyed-movie-resolve2-5.swf.trace
@@ -0,0 +1 @@
+undefined
diff --git a/test/trace/destroyed-movie-resolve2-6.swf b/test/trace/destroyed-movie-resolve2-6.swf
new file mode 100644
index 0000000..a384e8c
Binary files /dev/null and b/test/trace/destroyed-movie-resolve2-6.swf differ
diff --git a/test/trace/destroyed-movie-resolve2-6.swf.trace b/test/trace/destroyed-movie-resolve2-6.swf.trace
new file mode 100644
index 0000000..417b7b5
--- /dev/null
+++ b/test/trace/destroyed-movie-resolve2-6.swf.trace
@@ -0,0 +1 @@
+undefined
diff --git a/test/trace/destroyed-movie-resolve2-7.swf b/test/trace/destroyed-movie-resolve2-7.swf
new file mode 100644
index 0000000..c5b44be
Binary files /dev/null and b/test/trace/destroyed-movie-resolve2-7.swf differ
diff --git a/test/trace/destroyed-movie-resolve2-7.swf.trace b/test/trace/destroyed-movie-resolve2-7.swf.trace
new file mode 100644
index 0000000..417b7b5
--- /dev/null
+++ b/test/trace/destroyed-movie-resolve2-7.swf.trace
@@ -0,0 +1 @@
+undefined
diff --git a/test/trace/destroyed-movie-resolve2-8.swf b/test/trace/destroyed-movie-resolve2-8.swf
new file mode 100644
index 0000000..27141fa
Binary files /dev/null and b/test/trace/destroyed-movie-resolve2-8.swf differ
diff --git a/test/trace/destroyed-movie-resolve2-8.swf.trace b/test/trace/destroyed-movie-resolve2-8.swf.trace
new file mode 100644
index 0000000..417b7b5
--- /dev/null
+++ b/test/trace/destroyed-movie-resolve2-8.swf.trace
@@ -0,0 +1 @@
+undefined
diff --git a/test/trace/destroyed-movie-resolve2.as b/test/trace/destroyed-movie-resolve2.as
new file mode 100644
index 0000000..2f0ee5f
--- /dev/null
+++ b/test/trace/destroyed-movie-resolve2.as
@@ -0,0 +1,8 @@
+// makeswf -v 7 -s 200x150 -r 1 -o destroyed-movie-resolve2.swf destroyed-movie-resolve2.as
+
+x = createEmptyMovieClip ("a", 0);
+x.answer = 42;
+createEmptyMovieClip ("a", 0);
+trace (x.answer);
+
+getURL ("fscommand:quit", "");


More information about the Swfdec-commits mailing list