[Swfdec-commits] Branch '0.8' - 3 commits - swfdec/swfdec_bitmap_data.c test/trace

Benjamin Otte company at kemper.freedesktop.org
Fri Nov 14 06:51:56 PST 2008


 swfdec/swfdec_bitmap_data.c             |   35 +++++++++++++++++++++-----------
 test/trace/Makefile.am                  |    9 ++++++++
 test/trace/crash-0.8.2-copyPixels-5.swf |binary
 test/trace/crash-0.8.2-copyPixels-6.swf |binary
 test/trace/crash-0.8.2-copyPixels-7.swf |binary
 test/trace/crash-0.8.2-copyPixels-8.swf |binary
 test/trace/crash-0.8.2-copyPixels.as    |    7 ++++++
 7 files changed, 40 insertions(+), 11 deletions(-)

New commits:
commit 5195c41ab749afc8bdfaf1f2603281f23fc6a5d7
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Nov 12 21:17:53 2008 +0100

    add test for copyPixels crashers

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index f9e289d..8965fb2 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -1022,6 +1022,15 @@ EXTRA_DIST = \
 	crash-0.8.0-huffmann-table-8.swf \
 	crash-0.8.0-huffmann-table-8.swf.trace \
 	crash-0.8.0-huffmann-table.xml \
+	crash-0.8.2-copyPixels-5.swf \
+	crash-0.8.2-copyPixels-5.swf.trace \
+	crash-0.8.2-copyPixels-6.swf \
+	crash-0.8.2-copyPixels-6.swf.trace \
+	crash-0.8.2-copyPixels-7.swf \
+	crash-0.8.2-copyPixels-7.swf.trace \
+	crash-0.8.2-copyPixels-8.swf \
+	crash-0.8.2-copyPixels-8.swf.trace \
+	crash-0.8.2-copyPixels.as \
 	crash-0.8.2-gotoAndPlay-5.swf \
 	crash-0.8.2-gotoAndPlay-5.swf.trace \
 	crash-0.8.2-gotoAndPlay-6.swf \
diff --git a/test/trace/crash-0.8.2-copyPixels-5.swf b/test/trace/crash-0.8.2-copyPixels-5.swf
new file mode 100644
index 0000000..442360d
Binary files /dev/null and b/test/trace/crash-0.8.2-copyPixels-5.swf differ
diff --git a/test/trace/crash-0.8.2-copyPixels-5.swf.trace b/test/trace/crash-0.8.2-copyPixels-5.swf.trace
new file mode 100644
index 0000000..e69de29
diff --git a/test/trace/crash-0.8.2-copyPixels-6.swf b/test/trace/crash-0.8.2-copyPixels-6.swf
new file mode 100644
index 0000000..16ead00
Binary files /dev/null and b/test/trace/crash-0.8.2-copyPixels-6.swf differ
diff --git a/test/trace/crash-0.8.2-copyPixels-6.swf.trace b/test/trace/crash-0.8.2-copyPixels-6.swf.trace
new file mode 100644
index 0000000..e69de29
diff --git a/test/trace/crash-0.8.2-copyPixels-7.swf b/test/trace/crash-0.8.2-copyPixels-7.swf
new file mode 100644
index 0000000..c433c19
Binary files /dev/null and b/test/trace/crash-0.8.2-copyPixels-7.swf differ
diff --git a/test/trace/crash-0.8.2-copyPixels-7.swf.trace b/test/trace/crash-0.8.2-copyPixels-7.swf.trace
new file mode 100644
index 0000000..e69de29
diff --git a/test/trace/crash-0.8.2-copyPixels-8.swf b/test/trace/crash-0.8.2-copyPixels-8.swf
new file mode 100644
index 0000000..a7fe074
Binary files /dev/null and b/test/trace/crash-0.8.2-copyPixels-8.swf differ
diff --git a/test/trace/crash-0.8.2-copyPixels-8.swf.trace b/test/trace/crash-0.8.2-copyPixels-8.swf.trace
new file mode 100644
index 0000000..e69de29
diff --git a/test/trace/crash-0.8.2-copyPixels.as b/test/trace/crash-0.8.2-copyPixels.as
new file mode 100644
index 0000000..4e9b9fc
--- /dev/null
+++ b/test/trace/crash-0.8.2-copyPixels.as
@@ -0,0 +1,7 @@
+// makeswf -v 7 -s 200x150 -r 1 -o crash-0.8.2-copyPixels.swf crash-0.8.2-copyPixels.as
+
+bd = new flash.display.BitmapData (50, 50);
+bd.copyPixels (bd, {}, {}, null);
+bd.copyPixels (bd, {}, {}, bd, {}, null);
+
+getURL ("fscommand:quit", "");
commit e8174a647557dd575aad52c5de0227cc7b20ba1a
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Nov 12 21:07:41 2008 +0100

    fix BitmapData.copyPixels crashers

diff --git a/swfdec/swfdec_bitmap_data.c b/swfdec/swfdec_bitmap_data.c
index 8245cff..4ef20b0 100644
--- a/swfdec/swfdec_bitmap_data.c
+++ b/swfdec/swfdec_bitmap_data.c
@@ -366,13 +366,25 @@ swfdec_rectangle_from_as_object (SwfdecRectangle *rect, SwfdecAsObject *object)
 
   /* FIXME: This function is untested */
   val = swfdec_as_object_peek_variable (object, SWFDEC_AS_STR_x);
-  rect->x = swfdec_as_value_to_integer (cx, val);
+  if (val)
+    rect->x = swfdec_as_value_to_integer (cx, val);
+  else
+    rect->x = 0;
   val = swfdec_as_object_peek_variable (object, SWFDEC_AS_STR_y);
-  rect->y = swfdec_as_value_to_integer (cx, val);
+  if (val)
+    rect->y = swfdec_as_value_to_integer (cx, val);
+  else
+    rect->y = 0;
   val = swfdec_as_object_peek_variable (object, SWFDEC_AS_STR_width);
-  rect->width = swfdec_as_value_to_integer (cx, val);
+  if (val)
+    rect->width = swfdec_as_value_to_integer (cx, val);
+  else
+    rect->width = 0;
   val = swfdec_as_object_peek_variable (object, SWFDEC_AS_STR_height);
-  rect->height = swfdec_as_value_to_integer (cx, val);
+  if (val)
+    rect->height = swfdec_as_value_to_integer (cx, val);
+  else
+    rect->height = 0;
   return rect->width > 0 && rect->height > 0;
 }
 
@@ -395,19 +407,20 @@ swfdec_bitmap_data_copyPixels (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
   SwfdecBitmapData *bitmap, *source, *alpha = NULL;
-  SwfdecAsObject *recto, *pt, *apt = NULL;
+  SwfdecAsObject *recto = NULL, *pt, *apt = NULL, *so, *ao = NULL;
   SwfdecRectangle rect;
   gboolean copy_alpha = FALSE;
   cairo_t *cr;
   int x, y;
 
-  SWFDEC_AS_CHECK (SWFDEC_TYPE_BITMAP_DATA, &bitmap, "ooo|OOb", &source, &recto, &pt,
-      &alpha, &apt, &copy_alpha);
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_BITMAP_DATA, &bitmap, "ooo|oob", &so, &recto, &pt,
+      &ao, &apt, &copy_alpha);
 
   if (bitmap->surface == NULL ||
-      !SWFDEC_IS_BITMAP_DATA (source) ||
-      source->surface == NULL ||
-      (argc > 3 && (!SWFDEC_IS_BITMAP_DATA (alpha) || alpha->surface == NULL)) ||
+      !SWFDEC_IS_BITMAP_DATA (so) ||
+      (source = SWFDEC_BITMAP_DATA (so))->surface == NULL ||
+      (ao != NULL && (!SWFDEC_IS_BITMAP_DATA (ao) || 
+		    (alpha = SWFDEC_BITMAP_DATA (ao))->surface == NULL)) ||
       !swfdec_rectangle_from_as_object (&rect, recto))
     return;
 
commit 0897270a8ce2327de66c0e20b4b42816377e5708
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Nov 12 15:30:38 2008 +0100

    use height as height, not width

diff --git a/swfdec/swfdec_bitmap_data.c b/swfdec/swfdec_bitmap_data.c
index a7b1728..8245cff 100644
--- a/swfdec/swfdec_bitmap_data.c
+++ b/swfdec/swfdec_bitmap_data.c
@@ -244,7 +244,7 @@ swfdec_bitmap_data_get_rectangle (SwfdecAsContext *cx, SwfdecAsObject *object,
   SWFDEC_AS_VALUE_SET_INT (&args[0], 0);
   SWFDEC_AS_VALUE_SET_INT (&args[1], 0);
   SWFDEC_AS_VALUE_SET_INT (&args[2], cairo_image_surface_get_width (bitmap->surface));
-  SWFDEC_AS_VALUE_SET_INT (&args[3], cairo_image_surface_get_width (bitmap->surface));
+  SWFDEC_AS_VALUE_SET_INT (&args[3], cairo_image_surface_get_height (bitmap->surface));
   swfdec_as_object_create (SWFDEC_AS_FUNCTION (o), 4, args, ret);
 }
 


More information about the Swfdec-commits mailing list