CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/10/31 08:28:41
Modified files: . : ChangeLog server/vm : ASHandlers.cpp Log message: * server/vm/ASHandlers.cpp (ActionNewAdd): don't assume stack element references are valid after calls to to_primitive. Fixes bug #21482. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4749&r2=1.4750 http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.146&r2=1.147 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.4749 retrieving revision 1.4750 diff -u -b -r1.4749 -r1.4750 --- ChangeLog 30 Oct 2007 18:55:40 -0000 1.4749 +++ ChangeLog 31 Oct 2007 08:28:40 -0000 1.4750 @@ -1,3 +1,9 @@ +2007-10-31 Sandro Santilli <[EMAIL PROTECTED]> + + * server/vm/ASHandlers.cpp (ActionNewAdd): don't assume + stack element references are valid after calls to to_primitive. + Fixes bug #21482. + 2007-10-30 Sandro Santilli <[EMAIL PROTECTED]> * lots of files: assert(0) -> abort() Index: server/vm/ASHandlers.cpp =================================================================== RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v retrieving revision 1.146 retrieving revision 1.147 diff -u -b -r1.146 -r1.147 --- server/vm/ASHandlers.cpp 29 Oct 2007 21:07:34 -0000 1.146 +++ server/vm/ASHandlers.cpp 31 Oct 2007 08:28:41 -0000 1.147 @@ -17,7 +17,7 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // -/* $Id: ASHandlers.cpp,v 1.146 2007/10/29 21:07:34 cmusick Exp $ */ +/* $Id: ASHandlers.cpp,v 1.147 2007/10/31 08:28:41 strk Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -2810,13 +2810,20 @@ thread.ensureStack(2); - as_value& v1_in = env.top(0); - as_value& v2_in = env.top(1); +#ifndef NDEBUG + size_t stackSize = env.stack_size(); +#endif + + as_value v1 = env.top(0).to_primitive(env); + as_value v2 = env.top(1).to_primitive(env); - as_value v1 = v1_in.to_primitive(env); - as_value v2 = v2_in.to_primitive(env); + assert( stackSize == env.stack_size() ); - //log_msg(_("ActionNewAdd(%s, %s) [prim %s, %s] called"), v1_in.to_debug_string().c_str(), v2_in.to_debug_string().c_str(), v1.to_debug_string().c_str(), v2.to_debug_string().c_str()); + //log_debug(_("ActionNewAdd(%s, %s) [prim %s, %s] called"), + // env.top(0).to_debug_string().c_str(), + // v2_in.to_debug_string().c_str(), + // env.top(1).to_debug_string().c_str(), + // v2.to_debug_string().c_str()); if (v1.is_string() || v2.is_string() ) @@ -2824,7 +2831,7 @@ int version = env.get_version(); v2.convert_to_string_versioned(version, &env); v2.string_concat(v1.to_string_versioned(version, &env)); - v2_in = v2; // modify env.top(1) + env.top(1) = v2; } else { @@ -2836,7 +2843,7 @@ v2.set_double(v2num + v1num); - v2_in = v2; // modify env.top(1) + env.top(1) = v2; } env.drop(1); } _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit