[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: |
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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/vm/ASHandlers.cpp testsu...,
Sandro Santilli <=