gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/vm/ActionExec.cpp


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/vm/ActionExec.cpp
Date: Thu, 14 Dec 2006 19:47:08 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  06/12/14 19:47:08

Modified files:
        .              : ChangeLog 
        server/vm      : ActionExec.cpp 

Log message:
                * server/vm/ActionExec (operator()):
                  handle stack smashing and warn about elements left on
                  the stack after a function call.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.1939&r2=1.1940
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ActionExec.cpp?cvsroot=gnash&r1=1.4&r2=1.5

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.1939
retrieving revision 1.1940
diff -u -b -r1.1939 -r1.1940
--- ChangeLog   14 Dec 2006 14:06:06 -0000      1.1939
+++ ChangeLog   14 Dec 2006 19:47:08 -0000      1.1940
@@ -1,5 +1,11 @@
 2006-12-14 Sandro Santilli <address@hidden>
 
+       * server/vm/ActionExec (operator()):
+         handle stack smashing and warn about elements left on
+         the stack after a function call.
+
+2006-12-14 Sandro Santilli <address@hidden>
+
        * server/as_environment.{h,cpp}: add an additional
          argument to findLocal() to specify wheter the seek
          should descend in upper frames; descend when getting,

Index: server/vm/ActionExec.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ActionExec.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/vm/ActionExec.cpp    8 Dec 2006 23:11:25 -0000       1.4
+++ server/vm/ActionExec.cpp    14 Dec 2006 19:47:08 -0000      1.5
@@ -16,7 +16,7 @@
 
 //
 
-/* $Id: ActionExec.cpp,v 1.4 2006/12/08 23:11:25 strk Exp $ */
+/* $Id: ActionExec.cpp,v 1.5 2006/12/14 19:47:08 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -120,6 +120,8 @@
                
     character* original_target = env.get_target();
 
+    size_t original_stack_size = env.stack_size();
+
 #if DEBUG_STACK
        IF_VERBOSE_ACTION (
                log_action("at ActionExec operator() start, pc=" SIZET_FMT
@@ -190,6 +192,24 @@
     }
     
     env.set_target(original_target);
+
+    // check if the stack was smashed
+    if ( original_stack_size > env.stack_size() )
+    {
+           log_warning("Stack smashed (ActionScript compiler bug?)."
+                  "Fixing by pushing undefined values to the missing slots, "
+                 " but don't expect things to work afterwards.");
+           size_t missing = original_stack_size - env.stack_size();
+           for (size_t i=0; i<missing; ++i)
+           {
+                   env.push(as_value());
+           }
+    }
+    else if ( original_stack_size < env.stack_size() )
+    {
+           log_warning("Elements left on the stack after block execution. "
+               "I guess we could just cleanup, but let's keep it as it is...");
+    }
 }
 
 void




reply via email to

[Prev in Thread] Current Thread [Next in Thread]