gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/as_environment.h server/...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_environment.h server/...
Date: Fri, 16 Jun 2006 00:32:26 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  06/06/16 00:32:26

Modified files:
        .              : ChangeLog 
        server         : as_environment.h 
        server/swf     : ASHandlers.cpp 

Log message:
                * server/as_environment.h: changed drop(), top() and bottom()
                methods to take size_t rather then int and to check stack
                size; added (public) stack_size() method.
                * server/swf/ASHandlers.cpp (SWFHandlers::ActionPop):
                handle empty stack condition.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.408&r2=1.409
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.h?cvsroot=gnash&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf/ASHandlers.cpp?cvsroot=gnash&r1=1.8&r2=1.9

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.408
retrieving revision 1.409
diff -u -b -r1.408 -r1.409
--- ChangeLog   15 Jun 2006 21:38:51 -0000      1.408
+++ ChangeLog   16 Jun 2006 00:32:25 -0000      1.409
@@ -1,8 +1,14 @@
 2006-06-15 Sandro Santilli <address@hidden>
 
+       * server/as_environment.h: changed drop(), top() and bottom()
+       methods to take size_t rather then int and to check stack
+       size; added (public) stack_size() method.
+       * server/swf/ASHandlers.cpp (SWFHandlers::ActionPop):
+       handle empty stack condition.
        * server/edit_text_character.cpp: don't abort when text doesn't
        fit into the defined boundaries (fixes bug #16637).
        * server/edit_text_character.h: more stuff made private.
+       * server/edit_text_character_def.h: added do_word_wrap() method.
 
 2006-06-15 Vitaly Alexeev <address@hidden>
 

Index: server/as_environment.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_environment.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- server/as_environment.h     25 May 2006 11:33:28 -0000      1.2
+++ server/as_environment.h     16 Jun 2006 00:32:25 -0000      1.3
@@ -87,6 +87,7 @@
                frame_slot() {}
                frame_slot(const tu_string& name, const as_value& val) : 
m_name(name), m_value(val) {}
        };
+
        std::vector<frame_slot> m_local_frames;
 
 
@@ -108,26 +109,49 @@
 
 
        /// Pops an as_value off the stack top and return it.
-       as_value        pop() { as_value result = m_stack.back(); 
m_stack.pop_back(); return result; }
+       as_value pop()
+       {
+               assert( m_stack.size() > 0 );
+               as_value result = m_stack.back();
+               m_stack.pop_back();
+               return result;
+       }
 
        /// Get stack value at the given distance from top.
        //
        /// top(0) is actual stack top
        ///
-       as_value&       top(int dist) { return m_stack[m_stack.size() - 1 - 
dist]; }
+       as_value& top(size_t dist)
+       {
+               assert ( m_stack.size() > dist );
+               return m_stack[m_stack.size() - 1 - dist];
+       }
 
        /// Get stack value at the given distance from bottom.
        //
        /// bottom(0) is actual stack top
        ///
-       as_value&       bottom(int index) { return m_stack[index]; }
+       as_value& bottom(size_t index)
+       {
+               assert ( m_stack.size() > index );
+               return m_stack[index];
+       }
 
        /// Drop 'count' values off the top of the stack.
-       void    drop(int count) { m_stack.resize(m_stack.size() - count); }
+       void drop(size_t count)
+       {
+               assert ( m_stack.size() >= count );
+               m_stack.resize(m_stack.size() - count);
+       }
 
        /// Returns index of top stack element
+       // FIXME: what if stack is empty ??
+       // I'd obsolete this and convert calling code to use
+       // stack_size() instead.
        int     get_top_index() const { return m_stack.size() - 1; }
 
+       size_t stack_size() const { return m_stack.size(); }
+
        /// \brief
        /// Return the (possibly UNDEFINED) value of the named var.
        /// Variable name can contain path elements.
@@ -193,12 +217,12 @@
        movie*  find_target(const as_value& val) const;
 
        /// Dump content of the stack using the log_msg function
-       void dump_stack()
+       void dump_stack(std::ostream& out=std::cerr)
        {
                for (int i=0, n=m_stack.size(); i<n; i++)
                {
-                       log_msg("Stack[%d]: %s\n",
-                               i, m_stack[i].to_string());
+                       out << "Stack[" << i << "]: " 
+                           << m_stack[i].to_string() << std::endl;
                }
        }
 };

Index: server/swf/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf/ASHandlers.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- server/swf/ASHandlers.cpp   12 Jun 2006 21:56:37 -0000      1.8
+++ server/swf/ASHandlers.cpp   16 Jun 2006 00:32:26 -0000      1.9
@@ -591,7 +591,15 @@
 SWFHandlers::ActionPop(as_environment &env)
 {
 //    GNASH_REPORT_FUNCTION;
+       if ( ! env.stack_size() )
+       {
+               // Malformed SWF
+               log_warning("Empty stack on ActionPop, bogus SWF ?");
+       }
+       else
+       {
     env.drop(1);
+       }
     return true;
 }
 




reply via email to

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