[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