gnash-commit
[Top][All Lists]
Advanced

[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;
 }
 
 


reply via email to

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