[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] /srv/bzr/gnash/trunk r10335: Fix doctype parsing.
From: |
Benjamin Wolsey |
Subject: |
[Gnash-commit] /srv/bzr/gnash/trunk r10335: Fix doctype parsing. |
Date: |
Mon, 24 Nov 2008 13:21:31 +0100 |
User-agent: |
Bazaar (1.5) |
------------------------------------------------------------
revno: 10335
committer: Benjamin Wolsey <address@hidden>
branch nick: trunk
timestamp: Mon 2008-11-24 13:21:31 +0100
message:
Fix doctype parsing.
modified:
libcore/asobj/XML_as.cpp
------------------------------------------------------------
revno: 10327.1.1
committer: Benjamin Wolsey <address@hidden>
branch nick: test
timestamp: Mon 2008-11-24 09:33:00 +0100
message:
Parse doctype declaration properly.
modified:
libcore/asobj/XML_as.cpp
=== modified file 'libcore/asobj/XML_as.cpp'
--- a/libcore/asobj/XML_as.cpp 2008-11-21 15:15:25 +0000
+++ b/libcore/asobj/XML_as.cpp 2008-11-24 08:33:00 +0000
@@ -291,15 +291,34 @@
XML_as::parseDocTypeDecl(const std::string& xml,
std::string::const_iterator& it)
{
- std::string content;
- if (!parseNodeWithTerminator(xml, it, ">", content))
- {
- _status = XML_UNTERMINATED_DOCTYPE_DECL;
- return;
+
+ std::string::const_iterator end;
+ std::string::const_iterator current = it;
+
+ std::string::size_type count = 1;
+
+ // Look for angle brackets in the doctype declaration.
+ while (count) {
+
+ // Find the next closing bracket after the current position.
+ end = std::find(current, xml.end(), '>');
+ if (end == xml.end()) {
+ _status = XML_UNTERMINATED_DOCTYPE_DECL;
+ return;
+ }
+ --count;
+
+ // Count any opening brackets in between.
+ count += std::count(current, end, '<');
+ current = end;
+ ++current;
}
+
+ const std::string content(it, end);
std::ostringstream os;
os << '<' << content << '>';
_docTypeDecl = os.str();
+ it = end + 1;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] /srv/bzr/gnash/trunk r10335: Fix doctype parsing.,
Benjamin Wolsey <=