gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/parser/action_buffer.cpp...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/parser/action_buffer.cpp...
Date: Thu, 04 Oct 2007 22:05:01 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/10/04 22:05:01

Modified files:
        .              : ChangeLog 
        server/parser  : action_buffer.cpp 
        testsuite/swfdec: PASSING 

Log message:
                * server/parser/action_buffer.cpp (read): don't give up if an 
END
                  opcode is not found. You can find real-world cases for a 
missing
                  END in swfdec testsuite, tipically generated by swfmill.
                * testsuite/swfdec/PASSING: 2 more successes.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4527&r2=1.4528
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/action_buffer.cpp?cvsroot=gnash&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.34&r2=1.35

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4527
retrieving revision 1.4528
diff -u -b -r1.4527 -r1.4528
--- ChangeLog   4 Oct 2007 16:12:42 -0000       1.4527
+++ ChangeLog   4 Oct 2007 22:05:00 -0000       1.4528
@@ -1,3 +1,10 @@
+2007-10-05 Sandro Santilli <address@hidden>
+
+       * server/parser/action_buffer.cpp (read): don't give up if an END
+         opcode is not found. You can find real-world cases for a missing
+         END in swfdec testsuite, tipically generated by swfmill.
+       * testsuite/swfdec/PASSING: 2 more successes.
+
 2007-10-04 Aleksey Lim <address@hidden>
 
        * libmedia/MediaParser.h: wrap avcodec.h include in extern "C"

Index: server/parser/action_buffer.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/action_buffer.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- server/parser/action_buffer.cpp     27 Sep 2007 06:46:32 -0000      1.23
+++ server/parser/action_buffer.cpp     4 Oct 2007 22:05:00 -0000       1.24
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: action_buffer.cpp,v 1.23 2007/09/27 06:46:32 strk Exp $ */
+/* $Id: action_buffer.cpp,v 1.24 2007/10/04 22:05:00 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -59,24 +59,32 @@
 void
 action_buffer::read(stream* in)
 {
+    // NOTE:
+    // This method is called for different tags, not only DOACTION.
+    // For DoAction we have to read all the tag, in which case we 
+    // can optimize the read to a single memcpy.
+    // For other tags (like button actions) we have to seek for an END
+    // tag.
+    // TODO: implement two different 'read' flavors to make parsing more
+    // performant and SWF consistency checking more effective
+
     // Read action bytes.
-    for (;;) {
+    unsigned long endPos = in->get_tag_end_position();
+    while ( in->get_position() < endPos )
+    {
 #if 0
        size_t instruction_start = m_buffer.size();
        size_t pc = m_buffer.size();
 #endif
 
-       in->ensureBytes(1); // action_id
        uint8_t action_id = in->read_u8();
        m_buffer.push_back(action_id);
        
        if (action_id & 0x80) {
            // Action contains extra data.  Read it.
-           in->ensureBytes(2); // action length
            uint16_t length = in->read_u16();
            m_buffer.push_back(length & 0x0FF);
            m_buffer.push_back((length >> 8) & 0x0FF);
-           in->ensureBytes(length); // action actions 
            for (uint16_t i = 0; i < length; i++) {
                uint8_t b = in->read_u8(); // bytes ensured outside loop
                m_buffer.push_back(b);

Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- testsuite/swfdec/PASSING    2 Oct 2007 15:44:51 -0000       1.34
+++ testsuite/swfdec/PASSING    4 Oct 2007 22:05:01 -0000       1.35
@@ -259,3 +259,5 @@
 stack-overflow-5.swf
 stack-overflow-6.swf
 stack-overflow-7.swf
+definefunction2-arguments-registers.swf
+definefunction2-arguments.swf




reply via email to

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