[Swfdec-commits] Branch '0.6' - 3 commits - swfdec/swfdec_as_context.c swfdec/swfdec_as_interpret.c

Pekka Lampila medar at kemper.freedesktop.org
Wed May 28 04:48:28 PDT 2008


 swfdec/swfdec_as_context.c   |    4 ++++
 swfdec/swfdec_as_interpret.c |    4 ++--
 2 files changed, 6 insertions(+), 2 deletions(-)

New commits:
commit 43edd10454bfd1fe5fc7a31f67400d78904821a0
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Wed May 28 14:07:35 2008 +0300

    Fix exception fired when ending a block not handled immediately
    
    This allowed one more action to be ran after throwing and catching, could lead
    to assert

diff --git a/swfdec/swfdec_as_context.c b/swfdec/swfdec_as_context.c
index f2b4d09..24b25c6 100644
--- a/swfdec/swfdec_as_context.c
+++ b/swfdec/swfdec_as_context.c
@@ -907,7 +907,11 @@ start:
       pc = frame->pc;
       if (frame != context->frame)
 	goto start;
+      if (context->exception)
+	break;
     }
+    if (context->exception)
+      continue;
 
     /* decode next action */
     action = *pc;
commit 395097ce4092b142f545b3e1bf9785899135fb0b
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Wed May 28 14:43:15 2008 +0300

    Fix try actions that have only a catch statement
    
    Conflicts:
    
    	swfdec/swfdec_as_interpret.c

diff --git a/swfdec/swfdec_as_interpret.c b/swfdec/swfdec_as_interpret.c
index 98859be..eedd896 100644
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@ -2606,7 +2606,7 @@ swfdec_action_try_end_catch (SwfdecAsFrame *frame, gpointer data)
 
   cx = SWFDEC_AS_OBJECT (frame)->context;
 
-  if (swfdec_as_context_catch (cx, &val))
+  if (try_data->finally_start && swfdec_as_context_catch (cx, &val))
   {
     // we got an exception while in catch block:
     // create new block for finally to pass on the exception
commit d84dd3d3a23745cee2c23642bbc1c81a5483e7d4
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Wed May 28 14:42:20 2008 +0300

    Fix handling of try actions with only finally statement
    
    Conflicts:
    
    	swfdec/swfdec_as_interpret.c

diff --git a/swfdec/swfdec_as_interpret.c b/swfdec/swfdec_as_interpret.c
index ff0a66c..98859be 100644
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@ -2726,7 +2726,7 @@ swfdec_action_try (SwfdecAsContext *cx, guint action, const guint8 *data, guint
   if (use_catch)
     try_data->catch_start = data + len + try_size;
   if (use_finally)
-    try_data->finally_start = try_data->catch_start + try_data->catch_size;
+    try_data->finally_start = data + len + try_size + try_data->catch_size;
 
   if (try_data->use_register) {
     try_data->register_number = swfdec_bits_get_u8 (&bits);


More information about the Swfdec-commits mailing list