gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/parser/button_character_...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/parser/button_character_...
Date: Sat, 04 Nov 2006 01:37:16 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  06/11/04 01:37:16

Modified files:
        .              : ChangeLog 
        server/parser  : button_character_def.cpp button_character_def.h 

Log message:
                * server/parser/button_character_def.{cpp,h}: fixed last
                  fix attempting to still properly read the stream even
                  in case of an error.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.1506&r2=1.1507
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/button_character_def.cpp?cvsroot=gnash&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/button_character_def.h?cvsroot=gnash&r1=1.6&r2=1.7

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.1506
retrieving revision 1.1507
diff -u -b -r1.1506 -r1.1507
--- ChangeLog   4 Nov 2006 01:31:54 -0000       1.1506
+++ ChangeLog   4 Nov 2006 01:37:15 -0000       1.1507
@@ -1,5 +1,11 @@
 2006-11-03 Sandro Santilli <address@hidden>
 
+       * server/parser/button_character_def.{cpp,h}: fixed last
+         fix attempting to still properly read the stream even
+         in case of an error.
+
+2006-11-03 Sandro Santilli <address@hidden>
+
        * server/impl.cpp, server/swf.h: register "fixme" loaders
          for known SWF8 opcodes; fix a typo in previous commit of swf.h.
        * server/parser/movie_def_impl.cpp: be more quiet when not

Index: server/parser/button_character_def.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/button_character_def.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- server/parser/button_character_def.cpp      4 Nov 2006 00:56:13 -0000       
1.5
+++ server/parser/button_character_def.cpp      4 Nov 2006 01:37:16 -0000       
1.6
@@ -9,17 +9,11 @@
 #include "button_character_def.h"
 #include "button_character_instance.h" // for create_character_instance()
 
-//#include "action.h"
-//#include "render.h"
-//#include "sound.h"
 #include "stream.h" // for read()
 #include "movie_definition.h"
-//#include "sprite_instance.h"
-//#include "movie_root.h"
 #include "action_buffer.h"
 
 
-
 namespace gnash {
 
 //
@@ -60,6 +54,12 @@
 //
 
 bool
+button_record::is_valid()
+{
+       return (m_character_def != NULL);
+}
+
+bool
 button_record::read(stream* in, int tag_type,
                movie_definition* m)
 {
@@ -78,16 +78,13 @@
        // Get character definition now (safer)
        m_character_def = m->get_character_def(m_character_id);
        // If no character with given ID is found in the movie
-       // definition, we'll return false and hopefully caller
-       // will use it ...
+       // definition, we print an error, but keep parsing.
        if ( ! m_character_def )
        {
                log_error("button record refer to "
                        "character with id %d, which is not found "
                        "in the chars dictionary", m_character_id);
-               return false;
        }
-       // TODO: check if we should call add_ref  on the character_def
 
        m_button_layer = in->read_u16(); 
        m_button_matrix.read(in);
@@ -187,16 +184,21 @@
                        if (r.read(in, tag_type, m) == false)
                        {
                                // Null record; marks the end of button records.
-                               // (or an error, which we consider as an end
-                               // for safety)
                                break;
                        }
+
+                       // SAFETY CHECK:
+                       // if the button_record is corrupted, discard it
+                       if ( r.is_valid() )
+                       {
                        m_button_records.push_back(r);
                }
+               }
 
                // Read actions.
-               m_button_actions.resize(m_button_actions.size() + 1);
-               m_button_actions.back().read(in, tag_type);
+               button_action actions;
+               actions.read(in, tag_type);
+               m_button_actions.push_back(actions);
        }
        else if (tag_type == SWF::DEFINEBUTTONSOUND)
        {
@@ -241,8 +243,14 @@
                                // Null record; marks the end of button records.
                                break;
                        }
+
+                       // SAFETY CHECK:
+                       // if the button_record is corrupted, discard it
+                       if ( r.is_valid() )
+                       {
                        m_button_records.push_back(r);
                }
+               }
 
                if (button_2_action_offset > 0)
                {

Index: server/parser/button_character_def.h
===================================================================
RCS file: /sources/gnash/gnash/server/parser/button_character_def.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- server/parser/button_character_def.h        4 Nov 2006 00:56:13 -0000       
1.6
+++ server/parser/button_character_def.h        4 Nov 2006 01:37:16 -0000       
1.7
@@ -23,7 +23,10 @@
 
 class button_record
 {
+
+// TODO: make private, provide accessors 
 public:
+
        bool    m_hit_test;
        bool    m_down;
        bool    m_over;
@@ -34,14 +37,19 @@
        matrix  m_button_matrix;
        cxform  m_button_cxform;
 
+public:
+
        /// Read a button record from the SWF stream.
        //
        /// Return true if we read a record; false if this is a null
-       /// record or we encountered any other error  (like references
-       /// to unexistent characters)
-       /// 
-       ///
        bool    read(stream* in, int tag_type, movie_definition* m);
+
+       /// Return true if the button_record is valid
+       //
+       /// A button record is invalid if it refers to a character
+       /// which has not been defined.
+       bool is_valid();
+
 };
        
 class button_action




reply via email to

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