[Swfdec] 4 commits - libswfdec/swfdec_as_array.c libswfdec/swfdec_as_types.c test/trace

Pekka Lampila medar at kemper.freedesktop.org
Mon Jan 14 23:40:46 PST 2008


 libswfdec/swfdec_as_array.c            |   25 ++++----
 libswfdec/swfdec_as_types.c            |   11 +++
 test/trace/Makefile.am                 |  100 +++------------------------------
 test/trace/array-movieclip-5.swf       |binary
 test/trace/array-movieclip-5.swf.trace |   15 ++++
 test/trace/array-movieclip-6.swf       |binary
 test/trace/array-movieclip-6.swf.trace |   15 ++++
 test/trace/array-movieclip-7.swf       |binary
 test/trace/array-movieclip-7.swf.trace |   15 ++++
 test/trace/array-movieclip-8.swf       |binary
 test/trace/array-movieclip-8.swf.trace |   15 ++++
 test/trace/array-movieclip.as          |   42 +++++++++++++
 12 files changed, 135 insertions(+), 103 deletions(-)

New commits:
commit cb8b4a7040ee2e8aa502b7415e42c9e591bb9aee
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Tue Jan 15 09:26:36 2008 +0200

    Add a test for Array method's on movie clips

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 10da4f2..fdca6bc 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -92,6 +92,15 @@ EXTRA_DIST = \
 	arguments-8.swf.trace \
 	array.swf \
 	array.swf.trace \
+	array-movieclip.as \
+	array-movieclip-5.swf \
+	array-movieclip-5.swf.trace \
+	array-movieclip-6.swf \
+	array-movieclip-6.swf.trace \
+	array-movieclip-7.swf \
+	array-movieclip-7.swf.trace \
+	array-movieclip-8.swf \
+	array-movieclip-8.swf.trace \
 	array-new.as \
 	array-new-5.swf \
 	array-new-5.swf.trace \
diff --git a/test/trace/array-movieclip-5.swf b/test/trace/array-movieclip-5.swf
new file mode 100644
index 0000000..207a1d2
Binary files /dev/null and b/test/trace/array-movieclip-5.swf differ
diff --git a/test/trace/array-movieclip-5.swf.trace b/test/trace/array-movieclip-5.swf.trace
new file mode 100644
index 0000000..e8ad1e3
--- /dev/null
+++ b/test/trace/array-movieclip-5.swf.trace
@@ -0,0 +1,15 @@
+
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+
diff --git a/test/trace/array-movieclip-6.swf b/test/trace/array-movieclip-6.swf
new file mode 100644
index 0000000..c7ae484
Binary files /dev/null and b/test/trace/array-movieclip-6.swf differ
diff --git a/test/trace/array-movieclip-6.swf.trace b/test/trace/array-movieclip-6.swf.trace
new file mode 100644
index 0000000..af0d095
--- /dev/null
+++ b/test/trace/array-movieclip-6.swf.trace
@@ -0,0 +1,15 @@
+b,a,
+_level0.a
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+b,a,
diff --git a/test/trace/array-movieclip-7.swf b/test/trace/array-movieclip-7.swf
new file mode 100644
index 0000000..9290cba
Binary files /dev/null and b/test/trace/array-movieclip-7.swf differ
diff --git a/test/trace/array-movieclip-7.swf.trace b/test/trace/array-movieclip-7.swf.trace
new file mode 100644
index 0000000..af0d095
--- /dev/null
+++ b/test/trace/array-movieclip-7.swf.trace
@@ -0,0 +1,15 @@
+b,a,
+_level0.a
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+b,a,
diff --git a/test/trace/array-movieclip-8.swf b/test/trace/array-movieclip-8.swf
new file mode 100644
index 0000000..00bcb70
Binary files /dev/null and b/test/trace/array-movieclip-8.swf differ
diff --git a/test/trace/array-movieclip-8.swf.trace b/test/trace/array-movieclip-8.swf.trace
new file mode 100644
index 0000000..af0d095
--- /dev/null
+++ b/test/trace/array-movieclip-8.swf.trace
@@ -0,0 +1,15 @@
+b,a,
+_level0.a
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+undefined
+b,a,
diff --git a/test/trace/array-movieclip.as b/test/trace/array-movieclip.as
new file mode 100644
index 0000000..b95e67d
--- /dev/null
+++ b/test/trace/array-movieclip.as
@@ -0,0 +1,42 @@
+// makeswf -v 7 -r 1 -o array-movieclip-7.swf array-movieclip.as
+
+var a = this.createEmptyMovieClip ("a", 0);
+a[0] = "b";
+a[1] = "a";
+a.length = 2;
+
+ASSetPropFlags (a, null, 0, 7);
+ASSetPropFlags (Array.prototype, null, 0, 7);
+for (var prop in Array.prototype) {
+  a[prop] = Array.prop;
+}
+
+ASSetNative (Array.prototype, 252, "push,pop,concat,shift,unshift,slice,join,splice,toString,sort,reverse,sortOn", 1);
+
+var str = "";
+for (var i = 0; i < a.length; i++) {
+  str += a[i] + ",";
+}
+trace (str);
+
+trace (a);
+trace (a.push ("c"));
+trace (a.pop ());
+trace (a.concat (["d", "e"]));
+trace (a.shift ());
+trace (a.unshift ("f"));
+trace (a.slice (1, 2));
+trace (a.join (":"));
+trace (a.splice (1, 1, "g"));
+trace (a.toString ());
+trace (a.sort ());
+trace (a.reverse ());
+trace (a.sortOn ("a"));
+
+var str = "";
+for (var i = 0; i < a.length; i++) {
+  str += a[i] + ",";
+}
+trace (str);
+
+loadMovie ("FSCommand:quit", "");
commit c3bd8475e83618e9d46d006402752da9a7bae5e6
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Tue Jan 15 09:25:35 2008 +0200

    Don't allow Array methods to work on movie clips

diff --git a/libswfdec/swfdec_as_array.c b/libswfdec/swfdec_as_array.c
index f28170c..344c087 100644
--- a/libswfdec/swfdec_as_array.c
+++ b/libswfdec/swfdec_as_array.c
@@ -33,6 +33,7 @@
 #include "swfdec_as_native_function.h"
 #include "swfdec_as_string.h"
 #include "swfdec_as_strings.h"
+#include "swfdec_movie.h"
 #include "swfdec_debug.h"
 
 G_DEFINE_TYPE (SwfdecAsArray, swfdec_as_array, SWFDEC_TYPE_AS_OBJECT)
@@ -590,7 +591,7 @@ swfdec_as_array_join (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
   const char *var, *str, *sep;
   SwfdecAsValue val;
 
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   if (argc > 0) {
@@ -626,7 +627,7 @@ void
 swfdec_as_array_toString (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   swfdec_as_array_join (cx, object, 0, NULL, ret);
@@ -637,7 +638,7 @@ void
 swfdec_as_array_do_push (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   // if 0 args, just return the length
@@ -659,7 +660,7 @@ swfdec_as_array_do_pop (SwfdecAsContext *cx, SwfdecAsObject *object,
   gint32 length;
   const char *var;
 
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   // we allow negative indexes here, but not 0
@@ -686,7 +687,7 @@ swfdec_as_array_do_unshift (SwfdecAsContext *cx, SwfdecAsObject *object,
 {
   gint32 length;
 
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   if (argc) {
@@ -710,7 +711,7 @@ swfdec_as_array_do_shift (SwfdecAsContext *cx, SwfdecAsObject *object,
   gint32 length;
   const char *var;
 
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   // don't allow negative length
@@ -760,7 +761,7 @@ swfdec_as_array_reverse (SwfdecAsContext *cx, SwfdecAsObject *object,
 {
   gint32 length;
 
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   length = swfdec_as_array_length (object);
@@ -780,7 +781,7 @@ swfdec_as_array_concat (SwfdecAsContext *cx, SwfdecAsObject *object,
   SwfdecAsArray *array_new;
   const char *var;
 
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   object_new = swfdec_as_array_new (cx);
@@ -816,7 +817,7 @@ swfdec_as_array_slice (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
   gint32 length, start_index, num;
   SwfdecAsArray *array_new;
 
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   length = swfdec_as_array_length (object);
@@ -857,7 +858,7 @@ swfdec_as_array_splice (SwfdecAsContext *cx, SwfdecAsObject *object,
   gint32 length, start_index, num_remove, num_add;
   SwfdecAsArray *array_new;
 
-  if (object == NULL || argc == 0)
+  if (object == NULL || SWFDEC_IS_MOVIE (object) || argc == 0)
     return;
 
   length = swfdec_as_array_length (object);
@@ -1277,7 +1278,7 @@ swfdec_as_array_sort (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
   gint32 options;
   SwfdecAsFunction *custom_compare_func;
 
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   pos = 0;
@@ -1310,7 +1311,7 @@ swfdec_as_array_sortOn (SwfdecAsContext *cx, SwfdecAsObject *object,
   const char **fields;
   gint32 options;
 
-  if (object == NULL)
+  if (object == NULL || SWFDEC_IS_MOVIE (object))
     return;
 
   if (argc < 1)
commit 4013cd22bf88b0fd005fe495a4b25d76e576b17c
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Tue Jan 15 09:24:58 2008 +0200

    Remove moved files from test/trace/Makefile.am and add missing \

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index f73c024..10da4f2 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -306,31 +306,6 @@ EXTRA_DIST = \
 	boolean-properties-7.swf.trace \
 	boolean-properties-8.swf \
 	boolean-properties-8.swf.trace \
-	button-events-button-5.swf \
-	button-events-button-5.swf.act \
-	button-events-button-5.swf.trace \
-	button-events-button-6.swf \
-	button-events-button-6.swf.act \
-	button-events-button-6.swf.trace \
-	button-events-button-7.swf \
-	button-events-button-7.swf.act \
-	button-events-button-7.swf.trace \
-	button-events-button-8.swf \
-	button-events-button-8.swf.act \
-	button-events-button-8.swf.trace \
-	button-events.c \
-	button-events-menu-5.swf \
-	button-events-menu-5.swf.act \
-	button-events-menu-5.swf.trace \
-	button-events-menu-6.swf \
-	button-events-menu-6.swf.act \
-	button-events-menu-6.swf.trace \
-	button-events-menu-7.swf \
-	button-events-menu-7.swf.act \
-	button-events-menu-7.swf.trace \
-	button-events-menu-8.swf \
-	button-events-menu-8.swf.act \
-	button-events-menu-8.swf.trace \
 	button-hittest-5.swf \
 	button-hittest-5.swf.act \
 	button-hittest-5.swf.trace \
@@ -703,20 +678,7 @@ EXTRA_DIST = \
 	date-properties-8.swf \
 	date-properties-8.swf.trace \
 	default.stas \
-	default.sts
-	definebutton-5.swf \
-	definebutton-5.swf.act \
-	definebutton-5.swf.trace \
-	definebutton-6.swf \
-	definebutton-6.swf.act \
-	definebutton-6.swf.trace \
-	definebutton-7.swf \
-	definebutton-7.swf.act \
-	definebutton-7.swf.trace \
-	definebutton-8.swf \
-	definebutton-8.swf.act \
-	definebutton-8.swf.trace \
-	definebutton.xml \
+	default.sts \
 	definefunction2-arguments.swf \
 	definefunction2-arguments.swf.trace \
 	definefunction2-arguments.xml \
@@ -1468,45 +1430,6 @@ EXTRA_DIST = \
 	microphone-properties-7.swf.trace \
 	microphone-properties-8.swf \
 	microphone-properties-8.swf.trace \
-	mouse-addProperty-relevant.as \
-	mouse-addProperty-relevant-5.swf \
-	mouse-addProperty-relevant-5.swf.act \
-	mouse-addProperty-relevant-5.swf.trace \
-	mouse-addProperty-relevant-6.swf \
-	mouse-addProperty-relevant-6.swf.act \
-	mouse-addProperty-relevant-6.swf.trace \
-	mouse-addProperty-relevant-7.swf \
-	mouse-addProperty-relevant-7.swf.act \
-	mouse-addProperty-relevant-7.swf.trace \
-	mouse-addProperty-relevant-8.swf \
-	mouse-addProperty-relevant-8.swf.act \
-	mouse-addProperty-relevant-8.swf.trace \
-	mouse-movie-below-movie.as \
-	mouse-movie-below-movie-5.swf \
-	mouse-movie-below-movie-5.swf.act \
-	mouse-movie-below-movie-5.swf.trace \
-	mouse-movie-below-movie-6.swf \
-	mouse-movie-below-movie-6.swf.act \
-	mouse-movie-below-movie-6.swf.trace \
-	mouse-movie-below-movie-7.swf \
-	mouse-movie-below-movie-7.swf.act \
-	mouse-movie-below-movie-7.swf.trace \
-	mouse-movie-below-movie-8.swf \
-	mouse-movie-below-movie-8.swf.act \
-	mouse-movie-below-movie-8.swf.trace \
-	mouse-movie-below-nonevent-movie.as \
-	mouse-movie-below-nonevent-movie-5.swf \
-	mouse-movie-below-nonevent-movie-5.swf.act \
-	mouse-movie-below-nonevent-movie-5.swf.trace \
-	mouse-movie-below-nonevent-movie-6.swf \
-	mouse-movie-below-nonevent-movie-6.swf.act \
-	mouse-movie-below-nonevent-movie-6.swf.trace \
-	mouse-movie-below-nonevent-movie-7.swf \
-	mouse-movie-below-nonevent-movie-7.swf.act \
-	mouse-movie-below-nonevent-movie-7.swf.trace \
-	mouse-movie-below-nonevent-movie-8.swf \
-	mouse-movie-below-nonevent-movie-8.swf.act \
-	mouse-movie-below-nonevent-movie-8.swf.trace \
 	mouse-properties.as \
 	mouse-properties-5.swf \
 	mouse-properties-5.swf.trace \
@@ -1516,18 +1439,6 @@ EXTRA_DIST = \
 	mouse-properties-7.swf.trace \
 	mouse-properties-8.swf \
 	mouse-properties-8.swf.trace \
-	mouse-scaled.as \
-	mouse-scaled-5.swf \
-	mouse-scaled-5.swf.act \
-	mouse-scaled-5.swf.trace \
-	mouse-scaled-6.swf \
-	mouse-scaled-6.swf.act \
-	mouse-scaled-6.swf.trace \
-	mouse-scaled-6.swf.trace.org \
-	mouse-scaled-7.swf \
-	mouse-scaled-7.swf.act \
-	mouse-scaled-7.swf.trace \
-	mouse-scaled-7.swf.trace.org \
 	mouse-show-hide.as \
 	mouse-show-hide-5.swf \
 	mouse-show-hide-5.swf.trace \
commit b634e6d3e9fd6b1a5655645817c9da02d4b72573
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Jan 14 12:13:13 2008 +0200

    Fix handling of some 0x strings in swfdec_as_string_to_double

diff --git a/libswfdec/swfdec_as_types.c b/libswfdec/swfdec_as_types.c
index 3622ba1..ff959c3 100644
--- a/libswfdec/swfdec_as_types.c
+++ b/libswfdec/swfdec_as_types.c
@@ -482,10 +482,19 @@ swfdec_as_value_to_number (SwfdecAsContext *context, const SwfdecAsValue *value)
 	char *end;
 	double d;
 	
+	// FIXME: We should most likely copy Tamarin's code here (MathUtils.cpp)
 	s = SWFDEC_AS_VALUE_GET_STRING (&tmp);
 	if (s == SWFDEC_AS_STR_EMPTY)
 	  return NAN;
-	d = g_ascii_strtod (s, &end);
+	if (s[0] == '0' && s[1] == 'x') {
+	  if (context->version <= 5)
+	    return NAN;
+	  d = g_ascii_strtoll (s + 2, &end, 16);
+	} else {
+	  if (strchr (s, 'x') != NULL)
+	    return NAN;
+	  d = g_ascii_strtod (s, &end);
+	}
 	if (*end == '\0')
 	  return d == -0.0 ? 0.0 : d;
 	else


More information about the Swfdec mailing list