Benjamin Otte
2007-Aug-15 17:05 UTC
[Swfdec] 4 commits - libswfdec/swfdec_as_object.c libswfdec/swfdec_movie.c test/trace
libswfdec/swfdec_as_object.c | 4 +++- libswfdec/swfdec_movie.c | 6 +++--- test/trace/Makefile.am | 18 ++++++++++++++++++ test/trace/property-native-5.swf |binary test/trace/property-native-5.swf.trace | 4 ++++ test/trace/property-native-6.swf |binary test/trace/property-native-6.swf.trace | 4 ++++ test/trace/property-native-7.swf |binary test/trace/property-native-7.swf.trace | 4 ++++ test/trace/property-native-8.swf |binary test/trace/property-native-8.swf.trace | 4 ++++ test/trace/property-native.as | 11 +++++++++++ test/trace/prototype-movie-5.swf |binary test/trace/prototype-movie-5.swf.trace | 4 ++++ test/trace/prototype-movie-6.swf |binary test/trace/prototype-movie-6.swf.trace | 4 ++++ test/trace/prototype-movie-7.swf |binary test/trace/prototype-movie-7.swf.trace | 4 ++++ test/trace/prototype-movie-8.swf |binary test/trace/prototype-movie-8.swf.trace | 4 ++++ test/trace/prototype-movie.as | 12 ++++++++++++ 21 files changed, 79 insertions(+), 4 deletions(-) New commits: diff-tree 01dc987b2068a641f131abed7da476b2f7fd852a (from 130724227041a0e3916529bd498b207986880838) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 15 19:01:48 2007 +0200 add test for last commit diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index e3168fe..7e72228 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -740,6 +740,15 @@ EXTRA_DIST = \ place-object-remove-name-7.swf.trace \ preload.swf \ preload.swf.trace \ + property-native.as \ + property-native-5.swf \ + property-native-5.swf.trace \ + property-native-6.swf \ + property-native-6.swf.trace \ + property-native-7.swf \ + property-native-7.swf.trace \ + property-native-8.swf \ + property-native-8.swf.trace \ prototype-movie.as \ prototype-movie-5.swf \ prototype-movie-5.swf.trace \ diff --git a/test/trace/property-native-5.swf b/test/trace/property-native-5.swf new file mode 100644 index 0000000..e70f266 Binary files /dev/null and b/test/trace/property-native-5.swf differ diff --git a/test/trace/property-native-5.swf.trace b/test/trace/property-native-5.swf.trace new file mode 100644 index 0000000..c64601c --- /dev/null +++ b/test/trace/property-native-5.swf.trace @@ -0,0 +1,4 @@ +Check how addProperty overwrites native properties +0 +0 +10 diff --git a/test/trace/property-native-6.swf b/test/trace/property-native-6.swf new file mode 100644 index 0000000..a875d5e Binary files /dev/null and b/test/trace/property-native-6.swf differ diff --git a/test/trace/property-native-6.swf.trace b/test/trace/property-native-6.swf.trace new file mode 100644 index 0000000..bcc092c --- /dev/null +++ b/test/trace/property-native-6.swf.trace @@ -0,0 +1,4 @@ +Check how addProperty overwrites native properties +0 +42 +42 diff --git a/test/trace/property-native-7.swf b/test/trace/property-native-7.swf new file mode 100644 index 0000000..5e0b535 Binary files /dev/null and b/test/trace/property-native-7.swf differ diff --git a/test/trace/property-native-7.swf.trace b/test/trace/property-native-7.swf.trace new file mode 100644 index 0000000..bcc092c --- /dev/null +++ b/test/trace/property-native-7.swf.trace @@ -0,0 +1,4 @@ +Check how addProperty overwrites native properties +0 +42 +42 diff --git a/test/trace/property-native-8.swf b/test/trace/property-native-8.swf new file mode 100644 index 0000000..d081fd9 Binary files /dev/null and b/test/trace/property-native-8.swf differ diff --git a/test/trace/property-native-8.swf.trace b/test/trace/property-native-8.swf.trace new file mode 100644 index 0000000..bcc092c --- /dev/null +++ b/test/trace/property-native-8.swf.trace @@ -0,0 +1,4 @@ +Check how addProperty overwrites native properties +0 +42 +42 diff --git a/test/trace/property-native.as b/test/trace/property-native.as new file mode 100644 index 0000000..a987b1b --- /dev/null +++ b/test/trace/property-native.as @@ -0,0 +1,11 @@ +// makeswf -v 7 -s 200x150 -r 1 -o property-native.swf property-native.as + +trace ("Check how addProperty overwrites native properties"); +this.__proto__._x = 42; +trace (this._x); +this.addProperty ("_x", function () { return 42; }, function () { trace ("set"); }); +trace (this._x); +this._x = 10; +trace (this._x); + +loadMovie ("FSCommand:quit", ""); diff-tree 130724227041a0e3916529bd498b207986880838 (from d930fe50031d06c34edff598697220405ce7e88b) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 15 18:55:52 2007 +0200 query own properties before doing special ones diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index 42444b7..776e2b1 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -849,14 +849,14 @@ swfdec_movie_get_variable (SwfdecAsObjec if (movie->state == SWFDEC_MOVIE_STATE_DESTROYED) return FALSE; + if (SWFDEC_AS_OBJECT_CLASS (swfdec_movie_parent_class)->get (object, variable, val, flags)) + return TRUE; + if (swfdec_movie_get_asprop (movie, variable, val)) { *flags = 0; return TRUE; } - if (SWFDEC_AS_OBJECT_CLASS (swfdec_movie_parent_class)->get (object, variable, val, flags)) - return TRUE; - /* FIXME: check that this is correct */ if (object->context->version > 5 && variable == SWFDEC_AS_STR__global) { SWFDEC_AS_VALUE_SET_OBJECT (val, object->context->global); diff-tree d930fe50031d06c34edff598697220405ce7e88b (from 261b8c34898a7a4cd6b89a11acc08bfb0a5c35d2) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 15 16:03:40 2007 +0200 add check that sets movie as prototype diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index 3481072..e3168fe 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -740,6 +740,15 @@ EXTRA_DIST = \ place-object-remove-name-7.swf.trace \ preload.swf \ preload.swf.trace \ + prototype-movie.as \ + prototype-movie-5.swf \ + prototype-movie-5.swf.trace \ + prototype-movie-6.swf \ + prototype-movie-6.swf.trace \ + prototype-movie-7.swf \ + prototype-movie-7.swf.trace \ + prototype-movie-8.swf \ + prototype-movie-8.swf.trace \ prototypes.swf \ prototypes.swf.trace \ register-count.swf \ diff --git a/test/trace/prototype-movie-5.swf b/test/trace/prototype-movie-5.swf new file mode 100644 index 0000000..d6e8053 Binary files /dev/null and b/test/trace/prototype-movie-5.swf differ diff --git a/test/trace/prototype-movie-5.swf.trace b/test/trace/prototype-movie-5.swf.trace new file mode 100644 index 0000000..84187bf --- /dev/null +++ b/test/trace/prototype-movie-5.swf.trace @@ -0,0 +1,4 @@ +Check that movies cannot be prototypes +undefined +undefined +undefined diff --git a/test/trace/prototype-movie-6.swf b/test/trace/prototype-movie-6.swf new file mode 100644 index 0000000..41a4005 Binary files /dev/null and b/test/trace/prototype-movie-6.swf differ diff --git a/test/trace/prototype-movie-6.swf.trace b/test/trace/prototype-movie-6.swf.trace new file mode 100644 index 0000000..d8b7ab2 --- /dev/null +++ b/test/trace/prototype-movie-6.swf.trace @@ -0,0 +1,4 @@ +Check that movies cannot be prototypes +[type Function] +undefined +undefined diff --git a/test/trace/prototype-movie-7.swf b/test/trace/prototype-movie-7.swf new file mode 100644 index 0000000..434a42a Binary files /dev/null and b/test/trace/prototype-movie-7.swf differ diff --git a/test/trace/prototype-movie-7.swf.trace b/test/trace/prototype-movie-7.swf.trace new file mode 100644 index 0000000..d8b7ab2 --- /dev/null +++ b/test/trace/prototype-movie-7.swf.trace @@ -0,0 +1,4 @@ +Check that movies cannot be prototypes +[type Function] +undefined +undefined diff --git a/test/trace/prototype-movie-8.swf b/test/trace/prototype-movie-8.swf new file mode 100644 index 0000000..18f4e1b Binary files /dev/null and b/test/trace/prototype-movie-8.swf differ diff --git a/test/trace/prototype-movie-8.swf.trace b/test/trace/prototype-movie-8.swf.trace new file mode 100644 index 0000000..d8b7ab2 --- /dev/null +++ b/test/trace/prototype-movie-8.swf.trace @@ -0,0 +1,4 @@ +Check that movies cannot be prototypes +[type Function] +undefined +undefined diff --git a/test/trace/prototype-movie.as b/test/trace/prototype-movie.as new file mode 100644 index 0000000..92074b9 --- /dev/null +++ b/test/trace/prototype-movie.as @@ -0,0 +1,12 @@ +// makeswf -v 7 -s 200x150 -r 1 -o prototype-movie.swf movie6.as + +trace ("Check that movies cannot be prototypes"); + +o = new Object (); +this.foo = 42; +trace (o.addProperty); +o.__proto__ = this; +trace (o.foo); +trace (o.addProperty); + +loadMovie ("FSCommand:quit", ""); diff-tree 261b8c34898a7a4cd6b89a11acc08bfb0a5c35d2 (from 37ed222d6ea5305df2c238122be4e31a98af3229) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 15 16:02:30 2007 +0200 movies cannot be prototypes diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c index f7b0e98..64b8ff0 100644 --- a/libswfdec/swfdec_as_object.c +++ b/libswfdec/swfdec_as_object.c @@ -31,6 +31,7 @@ #include "swfdec_as_stack.h" #include "swfdec_as_strings.h" #include "swfdec_debug.h" +#include "swfdec_movie.h" /** * SECTION:SwfdecAsObject @@ -205,7 +206,8 @@ swfdec_as_object_do_set (SwfdecAsObject return; if (variable == SWFDEC_AS_STR___proto__) { - if (SWFDEC_AS_VALUE_IS_OBJECT (val)) { + if (SWFDEC_AS_VALUE_IS_OBJECT (val) && + !SWFDEC_IS_MOVIE (SWFDEC_AS_VALUE_GET_OBJECT (val))) { object->prototype = SWFDEC_AS_VALUE_GET_OBJECT (val); } else { object->prototype = NULL;
Apparently Analagous Threads
- Branch 'vivi' - 23 commits - libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_as_super.c libswfdec/swfdec_as_with.c libswfdec/swfdec_movie.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_sprite_movie.c test/trace vivified/core
- 4 commits - libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_as_super.c libswfdec/swfdec_as_with.c libswfdec/swfdec_movie.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_sprite_movie.c test/trace
- 59 commits - libswfdec-gtk/swfdec_gtk_widget.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_button.c libswfdec/swfdec_button.h libswfdec/swfdec_button_movie.c libswfdec/swfdec_button_movie.h libswfdec/swfdec_event.c
- 10 commits - doc/swfdec-sections.txt libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_loader.c libswfdec/swfdec_movie.c libswfdec/swfdec_movie_clip_loader.c libswfdec/swfdec_movie.h
- 12 commits - configure.ac doc/Makefile.am doc/swfdec-sections.txt libswfdec/jpeg libswfdec/swfdec_as_array.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_strings.c libswfdec/swfdec_player.c libswfdec/swfdec_player.h libswfdec/swfdec_player_internal.h