[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