Benjamin Otte
2007-Jun-28 09:45 UTC
[Swfdec] Branch 'as' - 4 commits - libswfdec/swfdec_debugger.c libswfdec/swfdec_movie.c libswfdec/swfdec_movie.h libswfdec/swfdec_sprite_movie.c test/image
libswfdec/swfdec_debugger.c | 4 - libswfdec/swfdec_movie.c | 8 +- libswfdec/swfdec_movie.h | 2 libswfdec/swfdec_sprite_movie.c | 2 test/image/Makefile.am | 3 test/image/placeobject-ratio.swf |binary test/image/placeobject-ratio.swf.png |binary test/image/placeobject-ratio.xml | 137 +++++++++++++++++++++++++++++++++++ 8 files changed, 148 insertions(+), 8 deletions(-) New commits: diff-tree c7622a13456a723bef13fd0a1b80a4060758af70 (from 0fcbb5ec49536a791f197016ebdcffbcc5790c20) Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 28 11:45:19 2007 +0200 add check for ratio replacing diff --git a/test/image/Makefile.am b/test/image/Makefile.am index d63d933..a0e80ef 100644 --- a/test/image/Makefile.am +++ b/test/image/Makefile.am @@ -26,6 +26,9 @@ EXTRA_DIST = \ negative-color-transform.c \ negative-color-transform.swf \ negative-color-transform.swf.png \ + placeobject-ratio.swf \ + placeobject-ratio.swf.png \ + placeobject-ratio.xml \ replace.c \ replace-button-button-5.swf \ replace-button-button-5.swf.png \ diff --git a/test/image/placeobject-ratio.swf b/test/image/placeobject-ratio.swf new file mode 100644 index 0000000..ed3573d Binary files /dev/null and b/test/image/placeobject-ratio.swf differ diff --git a/test/image/placeobject-ratio.swf.png b/test/image/placeobject-ratio.swf.png new file mode 100644 index 0000000..a39f9e8 Binary files /dev/null and b/test/image/placeobject-ratio.swf.png differ diff --git a/test/image/placeobject-ratio.xml b/test/image/placeobject-ratio.xml new file mode 100644 index 0000000..9ef2a5d --- /dev/null +++ b/test/image/placeobject-ratio.xml @@ -0,0 +1,137 @@ +<?xml version="1.0"?> +<swf version="6" compressed="1"> + <!-- swfmill xml2swf placeobject-ratio.xml placeobject-ratio.swf --> + <!-- Check that replace PlaceObject calls that don't modify the ratio _really_ + don't modify the ratio. --> + <Header framerate="100" frames="1"> + <size> + <Rectangle left="0" right="4000" top="0" bottom="3000"/> + </size> + <tags> + <SetBackgroundColor> + <color> + <Color red="255" green="255" blue="255"/> + </color> + </SetBackgroundColor> + <UnknownTag id="0x18"/> + <DefineShape objectID="1"> + <bounds> + <Rectangle left="0" right="1000" top="0" bottom="1000"/> + </bounds> + <styles> + <StyleList> + <fillStyles> + <Solid> + <color> + <Color red="255" green="0" blue="0"/> + </color> + </Solid> + </fillStyles> + <lineStyles/> + </StyleList> + </styles> + <shapes> + <Shape> + <edges> + <ShapeSetup x="0" y="0" fillStyle0="1"/> + <LineTo x="1000" y="0"/> + <LineTo x="0" y="1000"/> + <LineTo x="-1000" y="0"/> + <LineTo x="0" y="-1000"/> + <ShapeSetup/> + </edges> + </Shape> + </shapes> + </DefineShape> + <DefineSprite objectID="2" frames="1"> + <tags> + <PlaceObject2 replace="0" depth="1" objectID="1"> + <transform> + <Transform transX="0" transY="0"/> + </transform> + </PlaceObject2> + <ShowFrame/> + <End/> + </tags> + </DefineSprite> + <DefineShape objectID="3"> + <bounds> + <Rectangle left="0" right="1000" top="0" bottom="1000"/> + </bounds> + <styles> + <StyleList> + <fillStyles> + <Solid> + <color> + <Color red="128" green="128" blue="128"/> + </color> + </Solid> + </fillStyles> + <lineStyles/> + </StyleList> + </styles> + <shapes> + <Shape> + <edges> + <ShapeSetup x="0" y="0" fillStyle0="1"/> + <LineTo x="1000" y="0"/> + <LineTo x="0" y="1000"/> + <LineTo x="-1000" y="0"/> + <LineTo x="0" y="-1000"/> + <ShapeSetup/> + </edges> + </Shape> + </shapes> + </DefineShape> + <DefineSprite objectID="4" frames="1"> + <tags> + <PlaceObject2 replace="0" depth="1" objectID="3"> + <transform> + <Transform transX="0" transY="0"/> + </transform> + </PlaceObject2> + <ShowFrame/> + <End/> + </tags> + </DefineSprite> + <DefineSprite objectID="5" frames="26"> + <tags> + <PlaceObject2 replace="0" depth="1" objectID="2"> + </PlaceObject2> + <ShowFrame/> + <RemoveObject2 depth="1"/> + <PlaceObject2 replace="0" depth="1" objectID="4" morph="5"> + </PlaceObject2> + <ShowFrame/> + <PlaceObject2 replace="1" depth="1"> + </PlaceObject2> + <DoAction> + <actions> + <Dictionary> + <strings> + <String value="gotoAndStop"/> + </strings> + </Dictionary> + <PushData> + <items> + <StackInteger value="1"/> + <StackInteger value="1"/> + <StackDictionaryLookup index="0"/> + </items> + </PushData> + <CallFunction/> + <Pop/> + <EndAction/> + </actions> + </DoAction> + <ShowFrame/> + <End/> + </tags> + </DefineSprite> + <PlaceObject2 replace="0" depth="1" objectID="5" morph="5"> + </PlaceObject2> + <ShowFrame/> + <End/> + </tags> + </Header> +</swf> diff-tree 0fcbb5ec49536a791f197016ebdcffbcc5790c20 (from 8c3f00f5d0e59cdeee7b53799567ba5e151d9599) Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 28 11:44:02 2007 +0200 check invalid constant pool indexes instead of crashing diff --git a/libswfdec/swfdec_debugger.c b/libswfdec/swfdec_debugger.c index 52ae539..141935b 100644 --- a/libswfdec/swfdec_debugger.c +++ b/libswfdec/swfdec_debugger.c @@ -111,11 +111,11 @@ swfdec_debugger_print_push (ScriptParser goto error; } id = type == 8 ? swfdec_bits_get_u8 (&bits) : swfdec_bits_get_u16 (&bits); - s = swfdec_constant_pool_get (parser->constant_pool, id); - if (!s) { + if (id >= swfdec_constant_pool_size (parser->constant_pool)) { SWFDEC_ERROR ("constant pool size too small"); goto error; } + s = swfdec_constant_pool_get (parser->constant_pool, id); g_string_append_c (string, '"'); g_string_append (string, s); g_string_append_c (string, '"'); diff-tree 8c3f00f5d0e59cdeee7b53799567ba5e151d9599 (from 8667de8f3c4c44801a950f58aae4b3a6bd0a5c17) Author: Benjamin Otte <otte at gnome.org> Date: Thu Jun 28 11:43:38 2007 +0200 don't replace ration and clip depth if it didn't change (I still don't like this _set_static_properties() API) diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index e157437..d7403c5 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -943,10 +943,11 @@ swfdec_movie_new (SwfdecPlayer *player, */ void swfdec_movie_set_static_properties (SwfdecMovie *movie, const cairo_matrix_t *transform, - const SwfdecColorTransform *ctrans, guint ratio, int clip_depth, SwfdecEventList *events) + const SwfdecColorTransform *ctrans, int ratio, int clip_depth, SwfdecEventList *events) { g_return_if_fail (SWFDEC_IS_MOVIE (movie)); g_return_if_fail (clip_depth >= -16384 || clip_depth <= 0); + g_return_if_fail (ratio >= -1); if (movie->modified) { SWFDEC_LOG ("%s has already been modified by scripts, ignoring updates", movie->name); @@ -963,11 +964,11 @@ swfdec_movie_set_static_properties (Swfd movie->original_ctrans = *ctrans; swfdec_movie_invalidate (movie); } - if (ratio != movie->original_ratio) { + if (ratio >= 0 && (guint) ratio != movie->original_ratio) { movie->original_ratio = ratio; swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_EXTENTS); } - if (clip_depth != movie->clip_depth) { + if (clip_depth && clip_depth != movie->clip_depth) { movie->clip_depth = clip_depth; /* FIXME: is this correct? */ swfdec_movie_invalidate (movie->parent ? movie->parent : movie); diff --git a/libswfdec/swfdec_movie.h b/libswfdec/swfdec_movie.h index a347951..3f957a1 100644 --- a/libswfdec/swfdec_movie.h +++ b/libswfdec/swfdec_movie.h @@ -175,7 +175,7 @@ void swfdec_movie_set_static_properties (SwfdecMovie * movie, const cairo_matrix_t * transform, const SwfdecColorTransform *ctrans, - guint ratio, + int ratio, int clip_depth, SwfdecEventList * events); void swfdec_movie_invalidate (SwfdecMovie * movie); diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c index 457644e..1712104 100644 --- a/libswfdec/swfdec_sprite_movie.c +++ b/libswfdec/swfdec_sprite_movie.c @@ -165,7 +165,7 @@ swfdec_sprite_movie_perform_place (Swfde ratio = swfdec_bits_get_u16 (bits); SWFDEC_LOG (" ratio = %d", ratio); } else { - ratio = 0; + ratio = -1; } if (has_name) { diff-tree 8667de8f3c4c44801a950f58aae4b3a6bd0a5c17 (from 81472f980827d624a88339abd8db0e40c8aaf453) Author: Benjamin Otte <otte at gnome.org> Date: Wed Jun 27 19:20:18 2007 +0200 allow creating movies in depths < 16384 createEmptyMovieClip allows this diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index 0b0d463..e157437 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -881,7 +881,6 @@ swfdec_movie_new (SwfdecPlayer *player, gsize size; g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); - g_return_val_if_fail (depth > -16385, NULL); /* the lower depths are for deleted movies */ g_return_val_if_fail (parent == NULL || SWFDEC_IS_MOVIE (parent), NULL); g_return_val_if_fail (graphic == NULL || SWFDEC_IS_GRAPHIC (graphic), NULL);
Seemingly Similar Threads
- 4 commits - libswfdec/swfdec_shape_parser.c NEWS README test/trace
- 12 commits - libswfdec/Makefile.am libswfdec/swfdec_as_strings.c libswfdec/swfdec_as_types.c libswfdec/swfdec_as_types.h libswfdec/swfdec_gradient_pattern.c libswfdec/swfdec_gradient_pattern.h libswfdec/swfdec_movie_as_drawing.c libswfdec/swfdec_pattern.c
- Branch 'as' - 8 commits - libswfdec/swfdec_movie.c libswfdec/swfdec_sprite.c libswfdec/swfdec_sprite.h libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_sprite_movie.h libswfdec/swfdec_swf_decoder.c libswfdec/swfdec_swf_decoder.h
- 9 commits - configure.ac test/custom test/Makefile.am test/swfdec_test_initialize.as test/swfdec_test_initialize.h test/swfdec_test_test.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