1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-31 03:00:05 +00:00

Fix for parsing XML elements with comments at the start of a text block.

This commit is contained in:
jules 2014-02-06 10:01:18 +00:00
parent 04650ce6ea
commit 1fc549f666
2 changed files with 31 additions and 13 deletions

View file

@ -371,8 +371,8 @@ void XmlDocument::readQuotedString (String& result)
}
else if (character == 0)
{
outOfData = true;
setLastError ("unmatched quotes", false);
outOfData = true;
break;
}
@ -432,7 +432,7 @@ XmlElement* XmlDocument::readNextElement (const bool alsoParseSubElements)
++input;
if (alsoParseSubElements)
readChildElements (node);
readChildElements (*node);
break;
}
@ -487,9 +487,9 @@ XmlElement* XmlDocument::readNextElement (const bool alsoParseSubElements)
return node;
}
void XmlDocument::readChildElements (XmlElement* parent)
void XmlDocument::readChildElements (XmlElement& parent)
{
LinkedListPointer<XmlElement>::Appender childAppender (parent->firstChildElement);
LinkedListPointer<XmlElement>::Appender childAppender (parent.firstChildElement);
for (;;)
{
@ -563,7 +563,25 @@ void XmlDocument::readChildElements (XmlElement* parent)
const juce_wchar c = *input;
if (c == '<')
{
if (input[1] == '!' && input[2] == '-' && input[3] == '-')
{
input += 4;
const int closeComment = input.indexOf (CharPointer_ASCII ("-->"));
if (closeComment < 0)
{
setLastError ("unterminated comment", false);
outOfData = true;
return;
}
input += closeComment + 3;
continue;
}
break;
}
if (c == 0)
{

View file

@ -156,23 +156,23 @@ private:
String lastError, dtdText;
StringArray tokenisedDTD;
bool needToLoadDTD, ignoreEmptyTextElements;
ScopedPointer <InputSource> inputSource;
ScopedPointer<InputSource> inputSource;
XmlElement* parseDocumentElement (String::CharPointerType, bool outer);
void setLastError (const String& desc, bool carryOn);
void setLastError (const String&, bool carryOn);
bool parseHeader();
bool parseDTD();
void skipNextWhiteSpace();
juce_wchar readNextChar() noexcept;
XmlElement* readNextElement (bool alsoParseSubElements);
void readChildElements (XmlElement* parent);
void readQuotedString (String& result);
void readEntity (String& result);
void readChildElements (XmlElement&);
void readQuotedString (String&);
void readEntity (String&);
String getFileContents (const String& filename) const;
String expandEntity (const String& entity);
String expandExternalEntity (const String& entity);
String getParameterEntity (const String& entity);
String getFileContents (const String&) const;
String expandEntity (const String&);
String expandExternalEntity (const String&);
String getParameterEntity (const String&);
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (XmlDocument)
};