[Swfdec] 4 commits - libswfdec/swfdec_bits.c
libswfdec/swfdec_compiler.c libswfdec/swfdec_sprite.c
Benjamin Otte
company at kemper.freedesktop.org
Fri Feb 2 14:10:19 PST 2007
libswfdec/swfdec_bits.c | 4 +++-
libswfdec/swfdec_compiler.c | 6 +++++-
libswfdec/swfdec_sprite.c | 26 ++++++++++++++------------
3 files changed, 22 insertions(+), 14 deletions(-)
New commits:
diff-tree 12bf86eb10e873ca735fad310d7ab9e517f6662b (from b144bf362ce73d4a739663f8a28261eb317f45be)
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Feb 2 18:59:45 2007 +0100
Finish compiling at end of bitstream, too, not just with 0 action
diff --git a/libswfdec/swfdec_compiler.c b/libswfdec/swfdec_compiler.c
index abeec0b..68221e3 100644
--- a/libswfdec/swfdec_compiler.c
+++ b/libswfdec/swfdec_compiler.c
@@ -559,6 +559,10 @@ compile_push (CompileState *state, guint
switch (type) {
case 0: /* string */
s = swfdec_bits_skip_string (state->bits);
+ if (s) {
+ compile_state_error (state, "Push: Could not get string");
+ return;
+ }
compile_state_debug_add (state, "Push \"%s\"", s);
push_string (state, s);
break;
@@ -1300,7 +1304,7 @@ swfdec_compile (SwfdecPlayer *player, Sw
name = "Unnamed script";
compile_state_init (player->jscx, bits, version, &state);
SWFDEC_INFO ("Creating new script in frame");
- while ((action = swfdec_bits_get_u8 (bits))) {
+ while (swfdec_bits_left (bits) && (action = swfdec_bits_get_u8 (bits))) {
if (action & 0x80) {
len = swfdec_bits_get_u16 (bits);
} else {
diff-tree b144bf362ce73d4a739663f8a28261eb317f45be (from c93579e07522e43a3d4d3ba9927d50ee74d5d5cb)
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Feb 2 18:59:15 2007 +0100
Clean up parsing of actions in PlaceObject2
diff --git a/libswfdec/swfdec_sprite.c b/libswfdec/swfdec_sprite.c
index 440c3b8..9201218 100644
--- a/libswfdec/swfdec_sprite.c
+++ b/libswfdec/swfdec_sprite.c
@@ -395,10 +395,13 @@ swfdec_spriteseg_place_object_2 (SwfdecS
else
script_name = g_strdup_printf ("Sprite%u", SWFDEC_CHARACTER (content->graphic)->id);
while ((event_flags = swfdec_get_clipeventflags (s, bits)) != 0) {
- guint tmp = swfdec_bits_get_u32 (bits);
- SwfdecBits save = *bits;
- swfdec_bits_skip_bytes (&save, tmp);
-
+ guint length = swfdec_bits_get_u32 (bits);
+ SwfdecBits action_bits;
+ SwfdecBuffer *buffer = swfdec_bits_get_buffer (bits, length);
+
+ if (buffer == NULL)
+ break;
+ swfdec_bits_init (&action_bits, buffer);
if (event_flags & SWFDEC_EVENT_KEY_PRESS)
key_code = swfdec_bits_get_u8 (bits);
else
@@ -413,14 +416,13 @@ swfdec_spriteseg_place_object_2 (SwfdecS
}
if (content->events == NULL)
content->events = swfdec_event_list_new (SWFDEC_DECODER (s)->player);
- swfdec_event_list_parse (content->events, &s->b, s->version,
+ swfdec_event_list_parse (content->events, &action_bits, s->version,
event_flags, key_code, script_name);
- if (bits->ptr != save.ptr) {
- SWFDEC_ERROR ("record size and actual parsed action differ by %d bytes",
- (int) (save.ptr - bits->ptr));
+ if (swfdec_bits_left (&action_bits)) {
+ SWFDEC_ERROR ("not all action data was parsed: %u bytes left",
+ swfdec_bits_left (&action_bits));
}
- /* FIXME: who should we trust with parsing here? */
- *bits = save;
+ swfdec_buffer_unref (buffer);
}
g_free (script_name);
}
diff-tree c93579e07522e43a3d4d3ba9927d50ee74d5d5cb (from f8448012991988e247c42ba67603b46e29a8d59f)
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Feb 2 18:58:14 2007 +0100
when checking available bits fails, consume all bits
diff --git a/libswfdec/swfdec_bits.c b/libswfdec/swfdec_bits.c
index f9f2749..fb18394 100644
--- a/libswfdec/swfdec_bits.c
+++ b/libswfdec/swfdec_bits.c
@@ -55,7 +55,9 @@ swfdec_bits_left (SwfdecBits *b)
#define SWFDEC_BITS_CHECK(b,n) G_STMT_START { \
if (swfdec_bits_left(b) < (n)) { \
- SWFDEC_ERROR("reading past end of buffer"); \
+ SWFDEC_ERROR ("reading past end of buffer"); \
+ b->ptr = b->end; \
+ b->idx = 0; \
return 0; \
} \
}G_STMT_END
diff-tree f8448012991988e247c42ba67603b46e29a8d59f (from a7b8850adba4086c321e69c8933f6248b3de0803)
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Feb 2 15:32:35 2007 +0100
Set clip depth correctly
Real depths get 16384 subtracted when reading from a file,
this is necessary for clip depths, too.
diff --git a/libswfdec/swfdec_sprite.c b/libswfdec/swfdec_sprite.c
index ffb8eb7..440c3b8 100644
--- a/libswfdec/swfdec_sprite.c
+++ b/libswfdec/swfdec_sprite.c
@@ -376,8 +376,8 @@ swfdec_spriteseg_place_object_2 (SwfdecS
SWFDEC_LOG (" name = %s", content->name);
}
if (has_clip_depth) {
- content->clip_depth = swfdec_bits_get_u16 (bits);
- SWFDEC_LOG (" clip_depth = %d (=> %d)", content->clip_depth, content->clip_depth - 16384);
+ content->clip_depth = swfdec_bits_get_u16 (bits) - 16384;
+ SWFDEC_LOG (" clip_depth = %d (=> %d)", content->clip_depth + 16384, content->clip_depth);
}
if (has_clip_actions) {
int reserved, clip_event_flags, event_flags, key_code;
More information about the Swfdec
mailing list