[Swfdec-commits] 3 commits - swfdec/swfdec_as_interpret.c test/trace
Benjamin Otte
company at kemper.freedesktop.org
Tue Feb 19 10:09:18 PST 2008
swfdec/swfdec_as_interpret.c | 4 +++-
test/trace/Makefile.am | 9 +++++++++
test/trace/newmethod-undefined-5.swf |binary
test/trace/newmethod-undefined-5.swf.trace | 9 +++++++++
test/trace/newmethod-undefined-6.swf |binary
test/trace/newmethod-undefined-6.swf.trace | 9 +++++++++
test/trace/newmethod-undefined-7.swf |binary
test/trace/newmethod-undefined-7.swf.trace | 9 +++++++++
test/trace/newmethod-undefined-8.swf |binary
test/trace/newmethod-undefined-8.swf.trace | 9 +++++++++
test/trace/newmethod-undefined.as | 24 ++++++++++++++++++++++++
11 files changed, 72 insertions(+), 1 deletion(-)
New commits:
commit 48a0c8a6e48a326919bfcd722edf4682eb103bea
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Feb 19 15:11:34 2008 +0100
add test for last commit(s)
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 850d742..79a2457 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -1759,6 +1759,15 @@ EXTRA_DIST = \
netstream-onmetadata.c \
netstream-onmetadata.swf \
netstream-onmetadata.swf.trace \
+ newmethod-undefined-5.swf \
+ newmethod-undefined-5.swf.trace \
+ newmethod-undefined-6.swf \
+ newmethod-undefined-6.swf.trace \
+ newmethod-undefined-7.swf \
+ newmethod-undefined-7.swf.trace \
+ newmethod-undefined-8.swf \
+ newmethod-undefined-8.swf.trace \
+ newmethod-undefined.as \
newobject-paths.as \
newobject-paths-5.swf \
newobject-paths-5.swf.trace \
diff --git a/test/trace/newmethod-undefined-5.swf b/test/trace/newmethod-undefined-5.swf
new file mode 100644
index 0000000..059f683
Binary files /dev/null and b/test/trace/newmethod-undefined-5.swf differ
diff --git a/test/trace/newmethod-undefined-5.swf.trace b/test/trace/newmethod-undefined-5.swf.trace
new file mode 100644
index 0000000..047d152
--- /dev/null
+++ b/test/trace/newmethod-undefined-5.swf.trace
@@ -0,0 +1,9 @@
+>>> (undefined}
+w00t
+>>> (string}
+w00t
+>>> null (null}
+valueOf
+>>> (object}
+toString
+w00t
diff --git a/test/trace/newmethod-undefined-6.swf b/test/trace/newmethod-undefined-6.swf
new file mode 100644
index 0000000..fc5fa34
Binary files /dev/null and b/test/trace/newmethod-undefined-6.swf differ
diff --git a/test/trace/newmethod-undefined-6.swf.trace b/test/trace/newmethod-undefined-6.swf.trace
new file mode 100644
index 0000000..047d152
--- /dev/null
+++ b/test/trace/newmethod-undefined-6.swf.trace
@@ -0,0 +1,9 @@
+>>> (undefined}
+w00t
+>>> (string}
+w00t
+>>> null (null}
+valueOf
+>>> (object}
+toString
+w00t
diff --git a/test/trace/newmethod-undefined-7.swf b/test/trace/newmethod-undefined-7.swf
new file mode 100644
index 0000000..d6dab68
Binary files /dev/null and b/test/trace/newmethod-undefined-7.swf differ
diff --git a/test/trace/newmethod-undefined-7.swf.trace b/test/trace/newmethod-undefined-7.swf.trace
new file mode 100644
index 0000000..9aa7edc
--- /dev/null
+++ b/test/trace/newmethod-undefined-7.swf.trace
@@ -0,0 +1,9 @@
+>>> undefined (undefined}
+w00t
+>>> (string}
+w00t
+>>> null (null}
+valueOf
+>>> (object}
+toString
+w00t
diff --git a/test/trace/newmethod-undefined-8.swf b/test/trace/newmethod-undefined-8.swf
new file mode 100644
index 0000000..29674f2
Binary files /dev/null and b/test/trace/newmethod-undefined-8.swf differ
diff --git a/test/trace/newmethod-undefined-8.swf.trace b/test/trace/newmethod-undefined-8.swf.trace
new file mode 100644
index 0000000..9aa7edc
--- /dev/null
+++ b/test/trace/newmethod-undefined-8.swf.trace
@@ -0,0 +1,9 @@
+>>> undefined (undefined}
+w00t
+>>> (string}
+w00t
+>>> null (null}
+valueOf
+>>> (object}
+toString
+w00t
diff --git a/test/trace/newmethod-undefined.as b/test/trace/newmethod-undefined.as
new file mode 100644
index 0000000..a3fdac5
--- /dev/null
+++ b/test/trace/newmethod-undefined.as
@@ -0,0 +1,24 @@
+// makeswf -v 7 -s 200x150 -r 1 -o newmethod-undefined.swf newmethod-undefined.as
+
+foo = function () {
+ trace ("w00t");
+};
+
+test = function (v) {
+ trace (">>> " + v + " (" + typeof (v) + "}");
+ asm {
+ push 0, "foo"
+ getvariable
+ push "v"
+ getvariable
+ newmethod
+ pop
+ };
+};
+
+test (undefined);
+test ("");
+test (null);
+test ({ valueOf: function () { trace ("valueOf"); return ""; }, toString: function () { trace ("toString"); return ""; } });
+
+loadMovie ("FSCommand:quit", "");
commit 2e4770f10b4326d98c572b536f9dc9ecca6407e9
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Feb 19 15:10:30 2008 +0100
NewMethod with empty to-string also doesn't try getting any variables
diff --git a/swfdec/swfdec_as_interpret.c b/swfdec/swfdec_as_interpret.c
index 80642cf..e5d7e20 100644
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@ -1715,15 +1715,14 @@ swfdec_action_new_method (SwfdecAsContext *cx, guint action, const guint8 *data,
const char *name;
swfdec_as_stack_ensure_size (cx, 3);
+ name = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
constructor = swfdec_as_stack_peek (cx, 2);
n_args = swfdec_as_value_to_integer (cx, swfdec_as_stack_peek (cx, 3));
n_args = MIN (swfdec_as_stack_get_size (cx) - 3, n_args);
- if (SWFDEC_AS_VALUE_IS_UNDEFINED (swfdec_as_stack_peek (cx, 1))) {
- /* FIXME: anyone got a better idea for a name? */
- name = SWFDEC_AS_STR_EMPTY;
+ if (name == SWFDEC_AS_STR_EMPTY ||
+ SWFDEC_AS_VALUE_IS_UNDEFINED (swfdec_as_stack_peek (cx, 1))) {
} else {
- name = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
if (!SWFDEC_AS_VALUE_IS_OBJECT (constructor)) {
SWFDEC_WARNING ("NewMethod called without an object to get variable %s from", name);
goto fail;
commit efd10a1ab86b233dc419566d505588b4107a007f
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Feb 19 15:02:37 2008 +0100
NewMethod action with method name == undefined means "use object as function"
diff --git a/swfdec/swfdec_as_interpret.c b/swfdec/swfdec_as_interpret.c
index d9030d3..80642cf 100644
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@ -1715,12 +1715,15 @@ swfdec_action_new_method (SwfdecAsContext *cx, guint action, const guint8 *data,
const char *name;
swfdec_as_stack_ensure_size (cx, 3);
- name = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
constructor = swfdec_as_stack_peek (cx, 2);
n_args = swfdec_as_value_to_integer (cx, swfdec_as_stack_peek (cx, 3));
n_args = MIN (swfdec_as_stack_get_size (cx) - 3, n_args);
- if (name != SWFDEC_AS_STR_EMPTY) {
+ if (SWFDEC_AS_VALUE_IS_UNDEFINED (swfdec_as_stack_peek (cx, 1))) {
+ /* FIXME: anyone got a better idea for a name? */
+ name = SWFDEC_AS_STR_EMPTY;
+ } else {
+ name = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
if (!SWFDEC_AS_VALUE_IS_OBJECT (constructor)) {
SWFDEC_WARNING ("NewMethod called without an object to get variable %s from", name);
goto fail;
More information about the Swfdec-commits
mailing list