[Swfdec-commits] Branch '0.6' - 6 commits - swfdec/swfdec_text_field_movie.c test/trace

Benjamin Otte company at kemper.freedesktop.org
Thu Apr 3 02:44:10 PDT 2008


 swfdec/swfdec_text_field_movie.c               |   44 +++++++++++--------------
 test/trace/Makefile.am                         |    9 +++++
 test/trace/crash-0.6.2-replaceText-5.swf       |binary
 test/trace/crash-0.6.2-replaceText-5.swf.trace |    2 +
 test/trace/crash-0.6.2-replaceText-6.swf       |binary
 test/trace/crash-0.6.2-replaceText-6.swf.trace |    2 +
 test/trace/crash-0.6.2-replaceText-7.swf       |binary
 test/trace/crash-0.6.2-replaceText-7.swf.trace |    2 +
 test/trace/crash-0.6.2-replaceText-8.swf       |binary
 test/trace/crash-0.6.2-replaceText-8.swf.trace |    2 +
 test/trace/crash-0.6.2-replaceText.as          |   11 ++++++
 11 files changed, 49 insertions(+), 23 deletions(-)

New commits:
commit 0d0cd1155a90ac01be0941410512391f258f2924
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Apr 3 11:16:54 2008 +0200

    update for last commit

diff --git a/test/trace/crash-0.6.2-replaceText-5.swf b/test/trace/crash-0.6.2-replaceText-5.swf
index c0ea515..f97ddc8 100644
Binary files a/test/trace/crash-0.6.2-replaceText-5.swf and b/test/trace/crash-0.6.2-replaceText-5.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-6.swf b/test/trace/crash-0.6.2-replaceText-6.swf
index 23ce768..d5ad741 100644
Binary files a/test/trace/crash-0.6.2-replaceText-6.swf and b/test/trace/crash-0.6.2-replaceText-6.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-7.swf b/test/trace/crash-0.6.2-replaceText-7.swf
index 3460f19..9032823 100644
Binary files a/test/trace/crash-0.6.2-replaceText-7.swf and b/test/trace/crash-0.6.2-replaceText-7.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-8.swf b/test/trace/crash-0.6.2-replaceText-8.swf
index 37c8d79..a7d4815 100644
Binary files a/test/trace/crash-0.6.2-replaceText-8.swf and b/test/trace/crash-0.6.2-replaceText-8.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText.as b/test/trace/crash-0.6.2-replaceText.as
index 2f87239..6e2beaf 100644
--- a/test/trace/crash-0.6.2-replaceText.as
+++ b/test/trace/crash-0.6.2-replaceText.as
@@ -2,7 +2,8 @@
 
 createTextField ("t", 0, 0, 0, 200, 150);
 
-t.replaceText (0, 0, "Hello World");
+t.replaceText (0, 0, "Hell");
+t.replaceText (4, 4, "o World");
 trace (t.text);
 t.replaceText (0, 5, "Hi");
 trace (t.text);
commit 1e5517832019e0452fc2d1b2955c2384a9fa94c4
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Apr 3 11:16:20 2008 +0200

    fix another SEGV where we delated the wrong text format

diff --git a/swfdec/swfdec_text_field_movie.c b/swfdec/swfdec_text_field_movie.c
index 5036846..87f01a7 100644
--- a/swfdec/swfdec_text_field_movie.c
+++ b/swfdec/swfdec_text_field_movie.c
@@ -1533,8 +1533,8 @@ swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text,
 	 (iter != NULL &&
 	  ((SwfdecFormatIndex *) iter->data)->index_ <= end_index)) &&
 	text->formats->next != NULL) {
+      text->formats = g_slist_remove (text->formats, findex);
       g_free (findex);
-      text->formats = g_slist_remove (text->formats, iter->data);
       continue;
     }
     /* adapt indexes: remove deleted part, add to-be inserted text */
commit ab295088dad5ed90c3dbeb73bc310f10d21605ae
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Apr 3 10:45:09 2008 +0200

    update test to catch that latest issue, too

diff --git a/test/trace/crash-0.6.2-replaceText-5.swf b/test/trace/crash-0.6.2-replaceText-5.swf
index 0688039..c0ea515 100644
Binary files a/test/trace/crash-0.6.2-replaceText-5.swf and b/test/trace/crash-0.6.2-replaceText-5.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-5.swf.trace b/test/trace/crash-0.6.2-replaceText-5.swf.trace
index 417b7b5..d4f80bf 100644
--- a/test/trace/crash-0.6.2-replaceText-5.swf.trace
+++ b/test/trace/crash-0.6.2-replaceText-5.swf.trace
@@ -1 +1,2 @@
 undefined
+undefined
diff --git a/test/trace/crash-0.6.2-replaceText-6.swf b/test/trace/crash-0.6.2-replaceText-6.swf
index 6134f1a..23ce768 100644
Binary files a/test/trace/crash-0.6.2-replaceText-6.swf and b/test/trace/crash-0.6.2-replaceText-6.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-6.swf.trace b/test/trace/crash-0.6.2-replaceText-6.swf.trace
index 8b13789..139597f 100644
--- a/test/trace/crash-0.6.2-replaceText-6.swf.trace
+++ b/test/trace/crash-0.6.2-replaceText-6.swf.trace
@@ -1 +1,2 @@
 
+
diff --git a/test/trace/crash-0.6.2-replaceText-7.swf b/test/trace/crash-0.6.2-replaceText-7.swf
index e0ca1f2..3460f19 100644
Binary files a/test/trace/crash-0.6.2-replaceText-7.swf and b/test/trace/crash-0.6.2-replaceText-7.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-7.swf.trace b/test/trace/crash-0.6.2-replaceText-7.swf.trace
index 557db03..50a8b97 100644
--- a/test/trace/crash-0.6.2-replaceText-7.swf.trace
+++ b/test/trace/crash-0.6.2-replaceText-7.swf.trace
@@ -1 +1,2 @@
 Hello World
+Hi World
diff --git a/test/trace/crash-0.6.2-replaceText-8.swf b/test/trace/crash-0.6.2-replaceText-8.swf
index 972b61f..37c8d79 100644
Binary files a/test/trace/crash-0.6.2-replaceText-8.swf and b/test/trace/crash-0.6.2-replaceText-8.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-8.swf.trace b/test/trace/crash-0.6.2-replaceText-8.swf.trace
index 557db03..50a8b97 100644
--- a/test/trace/crash-0.6.2-replaceText-8.swf.trace
+++ b/test/trace/crash-0.6.2-replaceText-8.swf.trace
@@ -1 +1,2 @@
 Hello World
+Hi World
diff --git a/test/trace/crash-0.6.2-replaceText.as b/test/trace/crash-0.6.2-replaceText.as
index 1a7f85b..2f87239 100644
--- a/test/trace/crash-0.6.2-replaceText.as
+++ b/test/trace/crash-0.6.2-replaceText.as
@@ -4,5 +4,7 @@ createTextField ("t", 0, 0, 0, 200, 150);
 
 t.replaceText (0, 0, "Hello World");
 trace (t.text);
+t.replaceText (0, 5, "Hi");
+trace (t.text);
 
 getURL ("fscommand:quit", "");
commit 404db459f5cd25ed583cfb5111a66708a515eaa3
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Apr 3 10:42:01 2008 +0200

    Fix SEGV when looking for the next item
    
    ETOOMUCHREFACTORING

diff --git a/swfdec/swfdec_text_field_movie.c b/swfdec/swfdec_text_field_movie.c
index e500011..5036846 100644
--- a/swfdec/swfdec_text_field_movie.c
+++ b/swfdec/swfdec_text_field_movie.c
@@ -1530,8 +1530,8 @@ swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text,
     /* remove formats of deleted text */
     if (findex->index_ >= start_index &&
 	(end_index == text->input->len ||
-	 (iter->next != NULL &&
-	  ((SwfdecFormatIndex *) iter->next->data)->index_ <= end_index)) &&
+	 (iter != NULL &&
+	  ((SwfdecFormatIndex *) iter->data)->index_ <= end_index)) &&
 	text->formats->next != NULL) {
       g_free (findex);
       text->formats = g_slist_remove (text->formats, iter->data);
commit 97c5ded1c9ae0f9ae82c22421f22e20384f465f9
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Apr 2 23:44:29 2008 +0200

    add test for the just fixed crasher

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index f6d1fdf..86add78 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -718,6 +718,15 @@ EXTRA_DIST = \
 	crash-0.6.0-moviecliploader-7.swf.trace \
 	crash-0.6.0-moviecliploader-8.swf \
 	crash-0.6.0-moviecliploader-8.swf.trace \
+	crash-0.6.2-replaceText-5.swf \
+	crash-0.6.2-replaceText-5.swf.trace \
+	crash-0.6.2-replaceText-6.swf \
+	crash-0.6.2-replaceText-6.swf.trace \
+	crash-0.6.2-replaceText-7.swf \
+	crash-0.6.2-replaceText-7.swf.trace \
+	crash-0.6.2-replaceText-8.swf \
+	crash-0.6.2-replaceText-8.swf.trace \
+	crash-0.6.2-replaceText.as \
 	currentframe.swf \
 	currentframe.swf.trace \
 	dangling-compare.as \
diff --git a/test/trace/crash-0.6.2-replaceText-5.swf b/test/trace/crash-0.6.2-replaceText-5.swf
new file mode 100644
index 0000000..0688039
Binary files /dev/null and b/test/trace/crash-0.6.2-replaceText-5.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-5.swf.trace b/test/trace/crash-0.6.2-replaceText-5.swf.trace
new file mode 100644
index 0000000..417b7b5
--- /dev/null
+++ b/test/trace/crash-0.6.2-replaceText-5.swf.trace
@@ -0,0 +1 @@
+undefined
diff --git a/test/trace/crash-0.6.2-replaceText-6.swf b/test/trace/crash-0.6.2-replaceText-6.swf
new file mode 100644
index 0000000..6134f1a
Binary files /dev/null and b/test/trace/crash-0.6.2-replaceText-6.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-6.swf.trace b/test/trace/crash-0.6.2-replaceText-6.swf.trace
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/test/trace/crash-0.6.2-replaceText-6.swf.trace
@@ -0,0 +1 @@
+
diff --git a/test/trace/crash-0.6.2-replaceText-7.swf b/test/trace/crash-0.6.2-replaceText-7.swf
new file mode 100644
index 0000000..e0ca1f2
Binary files /dev/null and b/test/trace/crash-0.6.2-replaceText-7.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-7.swf.trace b/test/trace/crash-0.6.2-replaceText-7.swf.trace
new file mode 100644
index 0000000..557db03
--- /dev/null
+++ b/test/trace/crash-0.6.2-replaceText-7.swf.trace
@@ -0,0 +1 @@
+Hello World
diff --git a/test/trace/crash-0.6.2-replaceText-8.swf b/test/trace/crash-0.6.2-replaceText-8.swf
new file mode 100644
index 0000000..972b61f
Binary files /dev/null and b/test/trace/crash-0.6.2-replaceText-8.swf differ
diff --git a/test/trace/crash-0.6.2-replaceText-8.swf.trace b/test/trace/crash-0.6.2-replaceText-8.swf.trace
new file mode 100644
index 0000000..557db03
--- /dev/null
+++ b/test/trace/crash-0.6.2-replaceText-8.swf.trace
@@ -0,0 +1 @@
+Hello World
diff --git a/test/trace/crash-0.6.2-replaceText.as b/test/trace/crash-0.6.2-replaceText.as
new file mode 100644
index 0000000..1a7f85b
--- /dev/null
+++ b/test/trace/crash-0.6.2-replaceText.as
@@ -0,0 +1,8 @@
+// makeswf -v 7 -s 200x150 -r 1 -o crash-0.6.2-replaceText.swf crash-0.6.2-replaceText.as
+
+createTextField ("t", 0, 0, 0, 200, 150);
+
+t.replaceText (0, 0, "Hello World");
+trace (t.text);
+
+getURL ("fscommand:quit", "");
commit 673c70f1a0f96cf05c4aab99667825df3cc31d5f
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Apr 2 23:42:58 2008 +0200

    fix crash when TextField.replaceText was called on empty TextField

diff --git a/swfdec/swfdec_text_field_movie.c b/swfdec/swfdec_text_field_movie.c
index 84a4001..e500011 100644
--- a/swfdec/swfdec_text_field_movie.c
+++ b/swfdec/swfdec_text_field_movie.c
@@ -1506,8 +1506,9 @@ swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text,
     guint start_index, guint end_index, const char *str)
 {
   SwfdecFormatIndex *findex;
-  GSList *iter, *prev;
+  GSList *iter;
   gboolean first;
+  gsize len;
 
   g_return_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text));
   g_return_if_fail (end_index <= text->input->len);
@@ -1519,33 +1520,30 @@ swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text,
   if (text->style_sheet_input)
     return;
 
+  len = strlen (str);
   first = TRUE;
-  prev = NULL;
-  for (iter = text->formats; iter != NULL; iter = iter->next)
-  {
+  iter = text->formats; 
+  while (iter) {
     findex = iter->data;
-
-    if (findex->index_ >= start_index) {
-      if (end_index == text->input->len ||(iter->next != NULL &&
-	   ((SwfdecFormatIndex *)iter->next->data)->index_ <= end_index))
-      {
-	g_free (iter->data);
-	text->formats = g_slist_remove (text->formats, iter->data);
-	iter = (prev != NULL ? prev : text->formats);
-      }
-      else
-      {
-	findex->index_ += strlen (str) - (end_index - start_index);
-	if (first) {
-	  findex->index_ -= strlen (str);
-	  first = FALSE;
-	}
-      }
+    iter = iter->next;
+
+    /* remove formats of deleted text */
+    if (findex->index_ >= start_index &&
+	(end_index == text->input->len ||
+	 (iter->next != NULL &&
+	  ((SwfdecFormatIndex *) iter->next->data)->index_ <= end_index)) &&
+	text->formats->next != NULL) {
+      g_free (findex);
+      text->formats = g_slist_remove (text->formats, iter->data);
+      continue;
+    }
+    /* adapt indexes: remove deleted part, add to-be inserted text */
+    if (findex->index_ > start_index) {
+      findex->index_ = findex->index_ + start_index - end_index + len;
     }
-    prev = iter;
   }
 
-  if (end_index == text->input->len) {
+  if (end_index == text->input->len && text->input->len > 0) {
     if (SWFDEC_AS_OBJECT (text)->context->version < 8) {
       SWFDEC_FIXME ("replaceText to the end of the TextField might use wrong text format on version 7");
     }


More information about the Swfdec-commits mailing list