[Swfdec-commits] 4 commits - swfdec/swfdec_bitmap_data.c swfdec/swfdec_text_layout.c test/trace

Benjamin Otte company at kemper.freedesktop.org
Sat Sep 6 16:36:30 PDT 2008


 swfdec/swfdec_bitmap_data.c                          |    3 +++
 swfdec/swfdec_text_layout.c                          |   11 ++++++-----
 test/trace/Makefile.am                               |   18 ++++++++++++++++++
 test/trace/crash-0.7.5-draw-on-disposed-bitmap-5.swf |binary
 test/trace/crash-0.7.5-draw-on-disposed-bitmap-6.swf |binary
 test/trace/crash-0.7.5-draw-on-disposed-bitmap-7.swf |binary
 test/trace/crash-0.7.5-draw-on-disposed-bitmap-8.swf |binary
 test/trace/crash-0.7.5-draw-on-disposed-bitmap.as    |    8 ++++++++
 test/trace/crash-0.7.5-textlayout-5.swf              |binary
 test/trace/crash-0.7.5-textlayout-5.swf.trace        |    1 +
 test/trace/crash-0.7.5-textlayout-6.swf              |binary
 test/trace/crash-0.7.5-textlayout-6.swf.trace        |    1 +
 test/trace/crash-0.7.5-textlayout-7.swf              |binary
 test/trace/crash-0.7.5-textlayout-7.swf.trace        |    1 +
 test/trace/crash-0.7.5-textlayout-8.swf              |binary
 test/trace/crash-0.7.5-textlayout-8.swf.trace        |    1 +
 test/trace/crash-0.7.5-textlayout.as                 |    8 ++++++++
 17 files changed, 47 insertions(+), 5 deletions(-)

New commits:
commit 879b0812e869ee21182ab8167b2f683c07aedf09
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Sep 7 01:30:40 2008 +0200

    add test for recent fix

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 14f4c7d..1f88296 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -986,6 +986,15 @@ EXTRA_DIST = \
 	crash-0.7.2-TextField-replace-infloop-8.swf \
 	crash-0.7.2-TextField-replace-infloop-8.swf.trace \
 	crash-0.7.2-TextField-replace-infloop.as \
+	crash-0.7.5-draw-on-disposed-bitmap-5.swf \
+	crash-0.7.5-draw-on-disposed-bitmap-5.swf.trace \
+	crash-0.7.5-draw-on-disposed-bitmap-6.swf \
+	crash-0.7.5-draw-on-disposed-bitmap-6.swf.trace \
+	crash-0.7.5-draw-on-disposed-bitmap-7.swf \
+	crash-0.7.5-draw-on-disposed-bitmap-7.swf.trace \
+	crash-0.7.5-draw-on-disposed-bitmap-8.swf \
+	crash-0.7.5-draw-on-disposed-bitmap-8.swf.trace \
+	crash-0.7.5-draw-on-disposed-bitmap.as \
 	crash-0.7.5-duplicate-5.swf \
 	crash-0.7.5-duplicate-5.swf.trace \
 	crash-0.7.5-duplicate-6.swf \
diff --git a/test/trace/crash-0.7.5-draw-on-disposed-bitmap-5.swf b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-5.swf
new file mode 100644
index 0000000..28e5411
Binary files /dev/null and b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-5.swf differ
diff --git a/test/trace/crash-0.7.5-draw-on-disposed-bitmap-5.swf.trace b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-5.swf.trace
new file mode 100644
index 0000000..e69de29
diff --git a/test/trace/crash-0.7.5-draw-on-disposed-bitmap-6.swf b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-6.swf
new file mode 100644
index 0000000..699233e
Binary files /dev/null and b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-6.swf differ
diff --git a/test/trace/crash-0.7.5-draw-on-disposed-bitmap-6.swf.trace b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-6.swf.trace
new file mode 100644
index 0000000..e69de29
diff --git a/test/trace/crash-0.7.5-draw-on-disposed-bitmap-7.swf b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-7.swf
new file mode 100644
index 0000000..4ce89a0
Binary files /dev/null and b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-7.swf differ
diff --git a/test/trace/crash-0.7.5-draw-on-disposed-bitmap-7.swf.trace b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-7.swf.trace
new file mode 100644
index 0000000..e69de29
diff --git a/test/trace/crash-0.7.5-draw-on-disposed-bitmap-8.swf b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-8.swf
new file mode 100644
index 0000000..73419de
Binary files /dev/null and b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-8.swf differ
diff --git a/test/trace/crash-0.7.5-draw-on-disposed-bitmap-8.swf.trace b/test/trace/crash-0.7.5-draw-on-disposed-bitmap-8.swf.trace
new file mode 100644
index 0000000..e69de29
diff --git a/test/trace/crash-0.7.5-draw-on-disposed-bitmap.as b/test/trace/crash-0.7.5-draw-on-disposed-bitmap.as
new file mode 100644
index 0000000..91eea24
--- /dev/null
+++ b/test/trace/crash-0.7.5-draw-on-disposed-bitmap.as
@@ -0,0 +1,8 @@
+// makeswf -v 7 -s 200x150 -r 1 -o crash-0.7.5-draw-on-disposed-bitmap.swf crash-0.7.5-draw-on-disposed-bitmap.as
+
+createEmptyMovieClip ("a", 0);
+bd = new flash.display.BitmapData (50, 50);
+bd.dispose ();
+bd.draw (a);
+
+getURL ("fscommand:quit", "");
commit f7f6f5e75cdbebad2e1609b4d64a6beb8fa708cf
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Sep 7 01:29:36 2008 +0200

    make BitmapData.draw not crash for disposed BitmapData objects

diff --git a/swfdec/swfdec_bitmap_data.c b/swfdec/swfdec_bitmap_data.c
index 5c3ed45..dac1dd1 100644
--- a/swfdec/swfdec_bitmap_data.c
+++ b/swfdec/swfdec_bitmap_data.c
@@ -495,6 +495,9 @@ swfdec_bitmap_data_draw (SwfdecAsContext *cx, SwfdecAsObject *object,
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_BITMAP_DATA, &bitmap, "o|OO", &o, &matrix, &trans);
 
+  if (bitmap->surface == NULL)
+    return;
+
   if (argc >= 2) {
     if (matrix == NULL || !swfdec_matrix_from_as_object (&mat, matrix))
       return;
commit 8d8d0b66886dd4f1a8fd6cc0cc59e7b1ccd94c89
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Sep 7 01:17:30 2008 +0200

    add test for latest fix

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index db3300b..14f4c7d 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -995,6 +995,15 @@ EXTRA_DIST = \
 	crash-0.7.5-duplicate-8.swf \
 	crash-0.7.5-duplicate-8.swf.trace \
 	crash-0.7.5-duplicate.as \
+	crash-0.7.5-textlayout-5.swf \
+	crash-0.7.5-textlayout-5.swf.trace \
+	crash-0.7.5-textlayout-6.swf \
+	crash-0.7.5-textlayout-6.swf.trace \
+	crash-0.7.5-textlayout-7.swf \
+	crash-0.7.5-textlayout-7.swf.trace \
+	crash-0.7.5-textlayout-8.swf \
+	crash-0.7.5-textlayout-8.swf.trace \
+	crash-0.7.5-textlayout.as \
 	createEmptyMovieClip-events.sc \
 	createEmptyMovieClip-events.swf \
 	createEmptyMovieClip-events.swf.trace \
diff --git a/test/trace/crash-0.7.5-textlayout-5.swf b/test/trace/crash-0.7.5-textlayout-5.swf
new file mode 100644
index 0000000..c706c2c
Binary files /dev/null and b/test/trace/crash-0.7.5-textlayout-5.swf differ
diff --git a/test/trace/crash-0.7.5-textlayout-5.swf.trace b/test/trace/crash-0.7.5-textlayout-5.swf.trace
new file mode 100644
index 0000000..7c2b5e8
--- /dev/null
+++ b/test/trace/crash-0.7.5-textlayout-5.swf.trace
@@ -0,0 +1 @@
+12345678901234567890
1234567890<p align='right'>12345</p>
diff --git a/test/trace/crash-0.7.5-textlayout-6.swf b/test/trace/crash-0.7.5-textlayout-6.swf
new file mode 100644
index 0000000..f2d11cc
Binary files /dev/null and b/test/trace/crash-0.7.5-textlayout-6.swf differ
diff --git a/test/trace/crash-0.7.5-textlayout-6.swf.trace b/test/trace/crash-0.7.5-textlayout-6.swf.trace
new file mode 100644
index 0000000..c14c88b
--- /dev/null
+++ b/test/trace/crash-0.7.5-textlayout-6.swf.trace
@@ -0,0 +1 @@
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">12345678901234567890</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">123456789012345</FONT></P>
diff --git a/test/trace/crash-0.7.5-textlayout-7.swf b/test/trace/crash-0.7.5-textlayout-7.swf
new file mode 100644
index 0000000..3c8f42e
Binary files /dev/null and b/test/trace/crash-0.7.5-textlayout-7.swf differ
diff --git a/test/trace/crash-0.7.5-textlayout-7.swf.trace b/test/trace/crash-0.7.5-textlayout-7.swf.trace
new file mode 100644
index 0000000..c14c88b
--- /dev/null
+++ b/test/trace/crash-0.7.5-textlayout-7.swf.trace
@@ -0,0 +1 @@
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">12345678901234567890</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">123456789012345</FONT></P>
diff --git a/test/trace/crash-0.7.5-textlayout-8.swf b/test/trace/crash-0.7.5-textlayout-8.swf
new file mode 100644
index 0000000..9e68aa2
Binary files /dev/null and b/test/trace/crash-0.7.5-textlayout-8.swf differ
diff --git a/test/trace/crash-0.7.5-textlayout-8.swf.trace b/test/trace/crash-0.7.5-textlayout-8.swf.trace
new file mode 100644
index 0000000..c14c88b
--- /dev/null
+++ b/test/trace/crash-0.7.5-textlayout-8.swf.trace
@@ -0,0 +1 @@
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">12345678901234567890</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">123456789012345</FONT></P>
diff --git a/test/trace/crash-0.7.5-textlayout.as b/test/trace/crash-0.7.5-textlayout.as
new file mode 100644
index 0000000..790fb09
--- /dev/null
+++ b/test/trace/crash-0.7.5-textlayout.as
@@ -0,0 +1,8 @@
+// makeswf -v 7 -s 200x150 -r 1 -o crash-0.7.5-textlayout.swf crash-0.7.5-textlayout.as
+
+createTextField ("t", 0, 0, 0, 200, 150);
+t.html = true;
+t.htmlText = "12345678901234567890\r1234567890<p align='right'>12345</p>";
+trace (t.htmlText);
+
+getURL ("fscommand:quit", "");
commit 61cea589b033027fcae21b55da5d498d6702429c
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Sep 7 00:39:35 2008 +0200

    fix assertion when doing text layout (fixes #17264)
    
    I'm not really sure how to even test this :o

diff --git a/swfdec/swfdec_text_layout.c b/swfdec/swfdec_text_layout.c
index ea7c934..c5fd4cf 100644
--- a/swfdec/swfdec_text_layout.c
+++ b/swfdec/swfdec_text_layout.c
@@ -343,7 +343,9 @@ swfdec_text_layout_create_paragraph (SwfdecTextLayout *layout, PangoContext *con
     attr = swfdec_text_buffer_iter_get_attributes (layout->text, iter);
     list = pango_attr_list_new ();
 
-    while (start != end) {
+    start_next = start;
+    while (start_next != end) {
+      gsize cur_start = start_next;
       g_assert (attr);
       iter = swfdec_text_buffer_iter_next (layout->text, iter);
       attr_next = iter ? swfdec_text_buffer_iter_get_attributes (layout->text, iter) : NULL;
@@ -351,14 +353,13 @@ swfdec_text_layout_create_paragraph (SwfdecTextLayout *layout, PangoContext *con
 	swfdec_text_buffer_get_length (layout->text);
       start_next = MIN (start_next, end);
       
-      swfdec_text_layout_apply_attributes (layout, list, attr, start - block->start, start_next - block->start);
+      swfdec_text_layout_apply_attributes (layout, list, attr, cur_start - block->start, start_next - block->start);
 
       if (attr_next && new_block > start_next &&
 	  (swfdec_text_attributes_diff (attr, attr_next) & SWFDEC_TEXT_ATTRIBUTES_MASK_NEW_BLOCK))
 	new_block = start_next;
 
       attr = attr_next;
-      start = start_next;
     }
     pango_layout_set_attributes (block->layout, list);
     pango_attr_list_unref (list);
@@ -368,8 +369,8 @@ swfdec_text_layout_create_paragraph (SwfdecTextLayout *layout, PangoContext *con
 
       for (i = 0; i < pango_layout_get_line_count (block->layout); i++) {
 	PangoLayoutLine *line = pango_layout_get_line_readonly (block->layout, i);
-	if ((gsize) line->start_index + line->length >= new_block) {
-	  new_block = line->start_index + line->length;
+	if ((gsize) line->start_index + line->length + start >= new_block) {
+	  new_block = line->start_index + line->length + start;
 	  /* I hope deleting lines actually works by removing text */
 	  pango_layout_set_text (block->layout, string + start, new_block - start);
 	  g_assert (i + 1 == pango_layout_get_line_count (block->layout));


More information about the Swfdec-commits mailing list