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: Sat, 09 Dec 2006 19:24:47 +0000

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

Modified files:
        .              : ChangeLog 
        server/vm      : ASHandlers.cpp 
        testsuite/actionscript.all: delete.as 

Log message:
                * server/vm/ASHandlers.cpp (ActionDelete): be more robust
                  on malformed SWF (actually not sure about correctness,
                  but at least our testcase behave as the official
                  player does).
                * testsuite/actionscript.all/delete.as: xcheck => check.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.1903&r2=1.1904
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/delete.as?cvsroot=gnash&r1=1.3&r2=1.4

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.1903
retrieving revision 1.1904
diff -u -b -r1.1903 -r1.1904
--- ChangeLog   9 Dec 2006 09:17:35 -0000       1.1903
+++ ChangeLog   9 Dec 2006 19:24:46 -0000       1.1904
@@ -1,3 +1,11 @@
+2006-12-09 Sandro Santilli <address@hidden>
+
+       * server/vm/ASHandlers.cpp (ActionDelete): be more robust
+         on malformed SWF (actually not sure about correctness,
+         but at least our testcase behave as the official
+         player does).
+       * testsuite/actionscript.all/delete.as: xcheck => check.
+
 2006-12-09 Timothy Lee <address@hidden>
 
        * configure.ac: Detect the Cairo library when the Cairo backend is 

Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- server/vm/ASHandlers.cpp    8 Dec 2006 23:46:46 -0000       1.14
+++ server/vm/ASHandlers.cpp    9 Dec 2006 19:24:47 -0000       1.15
@@ -16,7 +16,7 @@
 
 //
 
-/* $Id: ASHandlers.cpp,v 1.14 2006/12/08 23:46:46 strk Exp $ */
+/* $Id: ASHandlers.cpp,v 1.15 2006/12/09 19:24:47 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -2005,24 +2005,49 @@
 
        assert(thread.code[thread.pc] == SWF::ACTION_DELETE); // 0x3A
 
-       ensure_stack(env, 2); // var, object
+       size_t stacksize = env.stack_size();
 
-       //log_msg("ActionDelete");
+       if ( stacksize < 1 )
+       {
+               IF_VERBOSE_MALFORMED_SWF(
+                       log_warning("No elements on the stack "
+                               "at ActionDelete (0x3A). "
+                               "Returning FALSE.");
+               );
+               env.push(as_value(false));
+               return;
+       }
 
        as_value var = env.pop();
-       as_value object = env.top(0);
-       if (object.get_type() == as_value::OBJECT)
+       as_value object; // undefined
+
+       if ( stacksize > 1 )
        {
-               as_object* obj = (as_object*) object.to_object();
-               if (obj)
+               // I'm not sure this is correct, what happens
+               // if the stack actually has an additional 
+               // value but it is not meant for us ??
+               object = env.pop();
+       }
+       else
                {
-                       bool ret = obj->delProperty(var.to_std_string());
-                       env.top(0).set_bool(ret);
-                       return;
+               IF_VERBOSE_MALFORMED_SWF(
+                       log_warning("One element on the stack "
+                               "at ActionDelete (0x3A). "
+                               "Assuming 'undefined' for Object arg.");
+               );
                }
+
+       as_object* obj = (as_object*) object.to_object();
+       bool ret;
+       if (obj) {
+               ret = obj->delProperty(var.to_std_string());
+       } else {
+               ret = thread.delVariable(var.to_std_string());
        }
 
-       env.top(0).set_bool(false);
+       env.push(as_value(ret));
+       return;
+
 }
 
 void

Index: testsuite/actionscript.all/delete.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/delete.as,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- testsuite/actionscript.all/delete.as        15 Oct 2006 02:30:55 -0000      
1.3
+++ testsuite/actionscript.all/delete.as        9 Dec 2006 19:24:47 -0000       
1.4
@@ -1,10 +1,10 @@
-rcsid="$Id: delete.as,v 1.3 2006/10/15 02:30:55 rsavoye Exp $";
+rcsid="$Id: delete.as,v 1.4 2006/12/09 19:24:47 strk Exp $";
 
 #include "check.as"
 
 var anObject = new Object();
 check(anObject != undefined);
-xcheck(delete anObject);
-xcheck(anObject == undefined);
+check(delete anObject);
+check(anObject == undefined);
 check(!delete noObject);
 




reply via email to

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