gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] /srv/bzr/gnash/trunk r9512: avm2 contributed patch


From: Sandro Santilli
Subject: [Gnash-commit] /srv/bzr/gnash/trunk r9512: avm2 contributed patch
Date: Mon, 21 Jul 2008 16:22:24 +0200
User-agent: Bazaar (1.5)

------------------------------------------------------------
revno: 9512
committer: Sandro Santilli <address@hidden>
branch nick: trunk
timestamp: Mon 2008-07-21 16:22:24 +0200
message:
  avm2 contributed patch
modified:
  server/parser/abc_block.cpp
  server/parser/abc_block.h
    ------------------------------------------------------------
    revno: 9508.1.1
    author: Tom Stellard <address@hidden>
    committer: Sandro Santilli <address@hidden>
    branch nick: avm2
    timestamp: Mon 2008-07-21 15:58:37 +0200
    message:
      Only check multiname values when necessary (patch #6587).
    modified:
      server/parser/abc_block.cpp
      server/parser/abc_block.h
=== modified file 'server/parser/abc_block.cpp'
--- a/server/parser/abc_block.cpp       2008-07-18 20:32:33 +0000
+++ b/server/parser/abc_block.cpp       2008-07-21 13:58:37 +0000
@@ -259,6 +259,31 @@
 
 using namespace abc_parsing;
 
+void
+abc_block::check_multiname_name(boost::uint32_t name){
+
+       if (name >= mStringPool.size()){
+               throw ParserException("ABC: Out of bounds string for 
Multiname.");
+       }
+}
+
+void
+abc_block::check_multiname_namespace(boost::uint32_t ns){
+       if (ns >= mNamespacePool.size()){
+               throw ParserException("ABC: Out of bounds namespace for 
Multiname.");
+       }
+}
+
+void
+abc_block::check_multiname_namespaceset(boost::uint32_t nsset){
+       if (!nsset){
+               throw ParserException("ABC: 0 selection for namespace set is 
invalid.");
+       }
+       if (nsset >= mNamespaceSetPool.size()){
+               throw ParserException("ABC: Out of bounds namespace set for 
Multiname.");
+       }
+}
+
 asClass *
 abc_block::locateClass(asName &m)
 {
@@ -478,43 +503,38 @@
         case asName::KIND_QnameA:
         {
             ns = mS->read_V32();
+            check_multiname_namespace(ns);
             name = mS->read_V32();
+            check_multiname_name(name);
             break;
         }
         case asName::KIND_RTQname:
         case asName::KIND_RTQnameA:
         {
             name = mS->read_V32();
+            check_multiname_name(name);
             break;
         }
         case asName::KIND_RTQnameL:
         case asName::KIND_RTQnameLA:
         {
+
             break;
         }
         case asName::KIND_Multiname:
         case asName::KIND_MultinameA:
         {
             name = mS->read_V32();
+            check_multiname_name(name);
             nsset = mS->read_V32();
-            // 0 is not a valid nsset.
-            if (!nsset)
-            {
-                ERR((_("ABC: 0 selection for namespace set is invalid.\n")));
-                return false;
-            }
+            check_multiname_namespaceset(nsset);
             break;
         }
         case asName::KIND_MultinameL:
         case asName::KIND_MultinameLA:
         {
             nsset = mS->read_V32();
-            // 0 is not a valid nsset.
-            if (!nsset)
-            {
-                ERR((_("ABC: 0 selection for namespace set is invalid.\n")));
-                return false;
-            }
+            check_multiname_namespaceset(nsset);
             break;
         }
         default:
@@ -525,27 +545,10 @@
         } // End of cases.
         } // End of switch.
 
-               if (name >= mStringPool.size())
-               {
-                       ERR((_("ABC: Out of bounds string for Multiname.\n")));
-                       return false;
-               }
-               if (ns >= mNamespacePool.size())
-               {
-                       ERR((_("ABC: Out of bounds namespace for 
Multiname.\n")));
-                       return false;
-               }
-               if (nsset >= mNamespaceSetPool.size())
-               {
-                       ERR((_("ABC: Out of bounds namespace set for 
Multiname.\n")));
-                       return false;
-               }
-
                mMultinamePool[i].mFlags = kind;
                mMultinamePool[i].setName(name);
+               mMultinamePool[i].setNamespace(mNamespacePool[ns]);
 
-               if (ns)
-                       mMultinamePool[i].setNamespace(mNamespacePool[ns]);
                if (nsset)
                        mMultinamePool[i].mNamespaceSet = 
&mNamespaceSetPool[nsset];
        } // End of main loop.

=== modified file 'server/parser/abc_block.h'
--- a/server/parser/abc_block.h 2008-06-09 09:18:18 +0000
+++ b/server/parser/abc_block.h 2008-07-21 13:58:37 +0000
@@ -180,6 +180,12 @@
        bool pool_value(boost::uint32_t index, boost::uint8_t type, as_value 
&v);
 
        abc_block();
+
+private:
+       void check_multiname_name(boost::uint32_t name);
+       void check_multiname_namespace(boost::uint32_t ns);
+       void check_multiname_namespaceset(boost::uint32_t nsset);
+
 };
 
 } /* namespace gnash */


reply via email to

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