[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/vm/ASHandlers.cpp testsu...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/vm/ASHandlers.cpp testsu... |
Date: |
Mon, 12 Mar 2007 11:45:39 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/03/12 11:45:39
Modified files:
. : ChangeLog
server/vm : ASHandlers.cpp
testsuite/swfdec: PASSING
Log message:
* server/vm/ASHandlers.cpp (ActionCallFunction,
ActionCallMethod,
ActionNewMethod): rather then pushing undefined values for
missing argument values on the stack, warn about the type of
SWF malformation and modify the number of args by using at
most
what's on the stack.
* testsuite/swfdec/PASSING: callfunction-stack.swf
now succeeds.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2610&r2=1.2611
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.60&r2=1.61
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.4&r2=1.5
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2610
retrieving revision 1.2611
diff -u -b -r1.2610 -r1.2611
--- ChangeLog 12 Mar 2007 11:42:56 -0000 1.2610
+++ ChangeLog 12 Mar 2007 11:45:38 -0000 1.2611
@@ -1,3 +1,13 @@
+2007-03-12 Sandro Santilli <address@hidden>
+
+ * server/vm/ASHandlers.cpp (ActionCallFunction, ActionCallMethod,
+ ActionNewMethod): rather then pushing undefined values for
+ missing argument values on the stack, warn about the type of
+ SWF malformation and modify the number of args by using at most
+ what's on the stack.
+ * testsuite/swfdec/PASSING: callfunction-stack.swf
+ now succeeds.
+
2007-03-12 Bastiaan Jacques <address@hidden>
* server/asobj/Boolean.cpp: Add ensureBoolean() to guard
Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -b -r1.60 -r1.61
--- server/vm/ASHandlers.cpp 9 Mar 2007 15:19:26 -0000 1.60
+++ server/vm/ASHandlers.cpp 12 Mar 2007 11:45:39 -0000 1.61
@@ -14,7 +14,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-/* $Id: ASHandlers.cpp,v 1.60 2007/03/09 15:19:26 strk Exp $ */
+/* $Id: ASHandlers.cpp,v 1.61 2007/03/12 11:45:39 strk Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -2124,9 +2124,19 @@
);
}
}
- unsigned nargs = unsigned(env.top(1).to_number());
- thread.ensureStack(2+nargs); // func name, nargs, args
+ // Get number of args, modifying it if not enough values are on the
stack.
+ unsigned nargs = unsigned(env.top(1).to_number());
+ unsigned available_args = env.stack_size()-2; // 2 for func name and
nargs
+ if ( available_args < nargs )
+ {
+ IF_VERBOSE_MALFORMED_SWF(
+ log_swferror("Attempt to call a function with %u arguments "
+ "while only %u are available on the stack.",
+ nargs, available_args);
+ );
+ nargs = available_args;
+ }
//log_msg("Function's nargs: %d", nargs);
@@ -2623,10 +2633,18 @@
// Get an object
as_value& obj_value = env.top(1);
- // Get number of arguments
+ // Get number of args, modifying it if not enough values are on the
stack.
unsigned nargs = unsigned(env.top(2).to_number());
-
- thread.ensureStack(3+nargs); // actual args
+ unsigned available_args = env.stack_size()-3; // 3 for obj, func and
nargs
+ if ( available_args < nargs )
+ {
+ IF_VERBOSE_MALFORMED_SWF(
+ log_swferror("Attempt to call a method with %u arguments "
+ "while only %u are available on the stack.",
+ nargs, available_args);
+ );
+ nargs = available_args;
+ }
IF_VERBOSE_ACTION (
@@ -2755,9 +2773,19 @@
as_value method_name = env.pop();
as_value obj_val = env.pop();
- unsigned nargs = unsigned(env.pop().to_number());
- thread.ensureStack(nargs); // previous 3 entries popped
+ // Get number of args, modifying it if not enough values are on the
stack.
+ unsigned nargs = unsigned(env.pop().to_number());
+ unsigned available_args = env.stack_size(); // previous 3 entries popped
+ if ( available_args < nargs )
+ {
+ IF_VERBOSE_MALFORMED_SWF(
+ log_swferror("Attempt to call a constructor with %u arguments "
+ "while only %u are available on the stack.",
+ nargs, available_args);
+ );
+ nargs = available_args;
+ }
as_object* obj = obj_val.to_object();
if ( ! obj )
Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- testsuite/swfdec/PASSING 12 Mar 2007 10:27:04 -0000 1.4
+++ testsuite/swfdec/PASSING 12 Mar 2007 11:45:39 -0000 1.5
@@ -19,3 +19,4 @@
DoInitAction-once.swf
classes.swf
empty-stack.swf
+callfunction-stack.swf