Make the xml parser less strict about xml problems (#3567)

* Make the xml parser less strict about xml problems

* clanfigy me harder
This commit is contained in:
ctrlaltca 2019-02-08 07:50:54 +01:00 committed by Zach H
parent 2703db75d0
commit 923b4acdbc
2 changed files with 35 additions and 31 deletions

View file

@ -77,13 +77,14 @@ void CockatriceXml3Parser::loadSetsFromXml(QXmlStreamReader &xml)
} }
if (xml.name() == "name") { if (xml.name() == "name") {
shortName = xml.readElementText(); shortName = xml.readElementText(QXmlStreamReader::IncludeChildElements);
} else if (xml.name() == "longname") { } else if (xml.name() == "longname") {
longName = xml.readElementText(); longName = xml.readElementText(QXmlStreamReader::IncludeChildElements);
} else if (xml.name() == "settype") { } else if (xml.name() == "settype") {
setType = xml.readElementText(); setType = xml.readElementText(QXmlStreamReader::IncludeChildElements);
} else if (xml.name() == "releasedate") { } else if (xml.name() == "releasedate") {
releaseDate = QDate::fromString(xml.readElementText(), Qt::ISODate); releaseDate =
QDate::fromString(xml.readElementText(QXmlStreamReader::IncludeChildElements), Qt::ISODate);
} else if (xml.name() != "") { } else if (xml.name() != "") {
qDebug() << "[CockatriceXml3Parser] Unknown set property" << xml.name() qDebug() << "[CockatriceXml3Parser] Unknown set property" << xml.name()
<< ", trying to continue anyway"; << ", trying to continue anyway";
@ -154,43 +155,45 @@ void CockatriceXml3Parser::loadCardsFromXml(QXmlStreamReader &xml)
bool upsideDown = false; bool upsideDown = false;
while (!xml.atEnd()) { while (!xml.atEnd()) {
qDebug() << xml.name();
if (xml.readNext() == QXmlStreamReader::EndElement) { if (xml.readNext() == QXmlStreamReader::EndElement) {
qDebug() << "end";
break; break;
} }
// variable - assigned properties // variable - assigned properties
if (xml.name() == "name") { if (xml.name() == "name") {
name = xml.readElementText(); name = xml.readElementText(QXmlStreamReader::IncludeChildElements);
} else if (xml.name() == "text") { } else if (xml.name() == "text") {
text = xml.readElementText(); text = xml.readElementText(QXmlStreamReader::IncludeChildElements);
} else if (xml.name() == "color") { } else if (xml.name() == "color") {
colors.append(xml.readElementText()); colors.append(xml.readElementText(QXmlStreamReader::IncludeChildElements));
} else if (xml.name() == "token") { } else if (xml.name() == "token") {
isToken = static_cast<bool>(xml.readElementText().toInt()); isToken = static_cast<bool>(xml.readElementText(QXmlStreamReader::IncludeChildElements).toInt());
// generic properties // generic properties
} else if (xml.name() == "manacost") { } else if (xml.name() == "manacost") {
properties.insert("manacost", xml.readElementText()); properties.insert("manacost", xml.readElementText(QXmlStreamReader::IncludeChildElements));
} else if (xml.name() == "cmc") { } else if (xml.name() == "cmc") {
properties.insert("cmc", xml.readElementText()); properties.insert("cmc", xml.readElementText(QXmlStreamReader::IncludeChildElements));
} else if (xml.name() == "type") { } else if (xml.name() == "type") {
QString type = xml.readElementText(); QString type = xml.readElementText(QXmlStreamReader::IncludeChildElements);
properties.insert("type", type); properties.insert("type", type);
properties.insert("maintype", getMainCardType(type)); properties.insert("maintype", getMainCardType(type));
} else if (xml.name() == "pt") { } else if (xml.name() == "pt") {
properties.insert("pt", xml.readElementText()); properties.insert("pt", xml.readElementText(QXmlStreamReader::IncludeChildElements));
} else if (xml.name() == "loyalty") { } else if (xml.name() == "loyalty") {
properties.insert("loyalty", xml.readElementText()); properties.insert("loyalty", xml.readElementText(QXmlStreamReader::IncludeChildElements));
// positioning info // positioning info
} else if (xml.name() == "tablerow") { } else if (xml.name() == "tablerow") {
tableRow = xml.readElementText().toInt(); tableRow = xml.readElementText(QXmlStreamReader::IncludeChildElements).toInt();
} else if (xml.name() == "cipt") { } else if (xml.name() == "cipt") {
cipt = (xml.readElementText() == "1"); cipt = (xml.readElementText(QXmlStreamReader::IncludeChildElements) == "1");
} else if (xml.name() == "upsidedown") { } else if (xml.name() == "upsidedown") {
upsideDown = (xml.readElementText() == "1"); upsideDown = (xml.readElementText(QXmlStreamReader::IncludeChildElements) == "1");
// sets // sets
} else if (xml.name() == "set") { } else if (xml.name() == "set") {
// NOTE: attributes must be read before readElementText() // NOTE: attributes must be read before readElementText()
QXmlStreamAttributes attrs = xml.attributes(); QXmlStreamAttributes attrs = xml.attributes();
QString setName = xml.readElementText(); QString setName = xml.readElementText(QXmlStreamReader::IncludeChildElements);
CardInfoPerSet setInfo(internalAddSet(setName)); CardInfoPerSet setInfo(internalAddSet(setName));
if (attrs.hasAttribute("muId")) { if (attrs.hasAttribute("muId")) {
setInfo.setProperty("muid", attrs.value("muId").toString()); setInfo.setProperty("muid", attrs.value("muId").toString());
@ -219,7 +222,7 @@ void CockatriceXml3Parser::loadCardsFromXml(QXmlStreamReader &xml)
bool variable = false; bool variable = false;
int count = 1; int count = 1;
QXmlStreamAttributes attrs = xml.attributes(); QXmlStreamAttributes attrs = xml.attributes();
QString cardName = xml.readElementText(); QString cardName = xml.readElementText(QXmlStreamReader::IncludeChildElements);
if (attrs.hasAttribute("count")) { if (attrs.hasAttribute("count")) {
if (attrs.value("count").toString().indexOf("x=") == 0) { if (attrs.value("count").toString().indexOf("x=") == 0) {
variable = true; variable = true;

View file

@ -77,13 +77,14 @@ void CockatriceXml4Parser::loadSetsFromXml(QXmlStreamReader &xml)
} }
if (xml.name() == "name") { if (xml.name() == "name") {
shortName = xml.readElementText(); shortName = xml.readElementText(QXmlStreamReader::IncludeChildElements);
} else if (xml.name() == "longname") { } else if (xml.name() == "longname") {
longName = xml.readElementText(); longName = xml.readElementText(QXmlStreamReader::IncludeChildElements);
} else if (xml.name() == "settype") { } else if (xml.name() == "settype") {
setType = xml.readElementText(); setType = xml.readElementText(QXmlStreamReader::IncludeChildElements);
} else if (xml.name() == "releasedate") { } else if (xml.name() == "releasedate") {
releaseDate = QDate::fromString(xml.readElementText(), Qt::ISODate); releaseDate =
QDate::fromString(xml.readElementText(QXmlStreamReader::IncludeChildElements), Qt::ISODate);
} else if (xml.name() != "") { } else if (xml.name() != "") {
qDebug() << "[CockatriceXml4Parser] Unknown set property" << xml.name() qDebug() << "[CockatriceXml4Parser] Unknown set property" << xml.name()
<< ", trying to continue anyway"; << ", trying to continue anyway";
@ -105,7 +106,7 @@ QVariantHash CockatriceXml4Parser::loadCardPropertiesFromXml(QXmlStreamReader &x
} }
if (xml.name() != "") { if (xml.name() != "") {
properties.insert(xml.name().toString(), xml.readElementText()); properties.insert(xml.name().toString(), xml.readElementText(QXmlStreamReader::IncludeChildElements));
} }
} }
return properties; return properties;
@ -135,26 +136,26 @@ void CockatriceXml4Parser::loadCardsFromXml(QXmlStreamReader &xml)
} }
// variable - assigned properties // variable - assigned properties
if (xml.name() == "name") { if (xml.name() == "name") {
name = xml.readElementText(); name = xml.readElementText(QXmlStreamReader::IncludeChildElements);
} else if (xml.name() == "text") { } else if (xml.name() == "text") {
text = xml.readElementText(); text = xml.readElementText(QXmlStreamReader::IncludeChildElements);
} else if (xml.name() == "token") { } else if (xml.name() == "token") {
isToken = static_cast<bool>(xml.readElementText().toInt()); isToken = static_cast<bool>(xml.readElementText(QXmlStreamReader::IncludeChildElements).toInt());
// generic properties // generic properties
} else if (xml.name() == "prop") { } else if (xml.name() == "prop") {
properties = loadCardPropertiesFromXml(xml); properties = loadCardPropertiesFromXml(xml);
// positioning info // positioning info
} else if (xml.name() == "tablerow") { } else if (xml.name() == "tablerow") {
tableRow = xml.readElementText().toInt(); tableRow = xml.readElementText(QXmlStreamReader::IncludeChildElements).toInt();
} else if (xml.name() == "cipt") { } else if (xml.name() == "cipt") {
cipt = (xml.readElementText() == "1"); cipt = (xml.readElementText(QXmlStreamReader::IncludeChildElements) == "1");
} else if (xml.name() == "upsidedown") { } else if (xml.name() == "upsidedown") {
upsideDown = (xml.readElementText() == "1"); upsideDown = (xml.readElementText(QXmlStreamReader::IncludeChildElements) == "1");
// sets // sets
} else if (xml.name() == "set") { } else if (xml.name() == "set") {
// NOTE: attributes but be read before readElementText() // NOTE: attributes but be read before readElementText()
QXmlStreamAttributes attrs = xml.attributes(); QXmlStreamAttributes attrs = xml.attributes();
QString setName = xml.readElementText(); QString setName = xml.readElementText(QXmlStreamReader::IncludeChildElements);
CardInfoPerSet setInfo(internalAddSet(setName)); CardInfoPerSet setInfo(internalAddSet(setName));
for (QXmlStreamAttribute attr : attrs) { for (QXmlStreamAttribute attr : attrs) {
setInfo.setProperty(attr.name().toString(), attr.value().toString()); setInfo.setProperty(attr.name().toString(), attr.value().toString());
@ -167,7 +168,7 @@ void CockatriceXml4Parser::loadCardsFromXml(QXmlStreamReader &xml)
bool variable = false; bool variable = false;
int count = 1; int count = 1;
QXmlStreamAttributes attrs = xml.attributes(); QXmlStreamAttributes attrs = xml.attributes();
QString cardName = xml.readElementText(); QString cardName = xml.readElementText(QXmlStreamReader::IncludeChildElements);
if (attrs.hasAttribute("count")) { if (attrs.hasAttribute("count")) {
if (attrs.value("count").toString().indexOf("x=") == 0) { if (attrs.value("count").toString().indexOf("x=") == 0) {
variable = true; variable = true;