[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