[Top][All Lists]
[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 */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] /srv/bzr/gnash/trunk r9512: avm2 contributed patch,
Sandro Santilli <=