[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