gnash-commit
[Top][All Lists]
Advanced

[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




reply via email to

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