From 6df30df992afb38974b8a703e8db9ee41b683946 Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Tue, 30 Apr 2013 17:00:00 +0200 Subject: [PATCH] Really fix parsing when the db contains two Root (Group) elements. --- src/format/KeePass2XmlReader.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/format/KeePass2XmlReader.cpp b/src/format/KeePass2XmlReader.cpp index 101b23b3..c6481110 100644 --- a/src/format/KeePass2XmlReader.cpp +++ b/src/format/KeePass2XmlReader.cpp @@ -159,13 +159,12 @@ bool KeePass2XmlReader::parseKeePassFile() parseMeta(); } else if (m_xml.name() == "Root") { - rootParsedSuccesfully = parseRoot(); - if (rootElementFound) { rootParsedSuccesfully = false; raiseError(29); } else { + rootParsedSuccesfully = parseRoot(); rootElementFound = true; } } @@ -437,6 +436,12 @@ bool KeePass2XmlReader::parseRoot() while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Group") { + if (groupElementFound) { + groupParsedSuccesfully = false; + raiseError(30); + continue; + } + Group* rootGroup = parseGroup(); if (rootGroup) { Group* oldRoot = m_db->rootGroup(); @@ -445,13 +450,7 @@ bool KeePass2XmlReader::parseRoot() groupParsedSuccesfully = true; } - if (groupElementFound) { - groupParsedSuccesfully = false; - raiseError(30); - } - else { - groupElementFound = true; - } + groupElementFound = true; } else if (m_xml.name() == "DeletedObjects") { parseDeletedObjects();