[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/vm/ActionExec.cpp,
Sandro Santilli <=