From a9b0e47ab53177887eed8594b456fe0f178f0f43 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 12 Jul 2018 14:49:13 +0200 Subject: shiboken: Do not swallow XML parsing errors Handler::parseFile() had some returns where the errors would be lost. Add accessor for the errorString() to the Handler and output in the calling function. Task-number: PYSIDE-743 Change-Id: I42d2b88478e8ebfac7f590c2086046116e2add74 Reviewed-by: Christian Tismer --- sources/shiboken2/ApiExtractor/typedatabase.cpp | 5 ++++- sources/shiboken2/ApiExtractor/typesystem.cpp | 7 +------ sources/shiboken2/ApiExtractor/typesystem_p.h | 2 ++ 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'sources/shiboken2') diff --git a/sources/shiboken2/ApiExtractor/typedatabase.cpp b/sources/shiboken2/ApiExtractor/typedatabase.cpp index 9529de40a..e494ba174 100644 --- a/sources/shiboken2/ApiExtractor/typedatabase.cpp +++ b/sources/shiboken2/ApiExtractor/typedatabase.cpp @@ -518,7 +518,10 @@ bool TypeDatabase::parseFile(QIODevice* device, bool generate) { QXmlStreamReader reader(device); Handler handler(this, generate); - return handler.parse(reader); + const bool result = handler.parse(reader); + if (!result) + qCWarning(lcShiboken, "%s", qPrintable(handler.errorString())); + return result; } PrimitiveTypeEntry *TypeDatabase::findPrimitiveType(const QString& name) const diff --git a/sources/shiboken2/ApiExtractor/typesystem.cpp b/sources/shiboken2/ApiExtractor/typesystem.cpp index baaec6d30..f316de80a 100644 --- a/sources/shiboken2/ApiExtractor/typesystem.cpp +++ b/sources/shiboken2/ApiExtractor/typesystem.cpp @@ -210,11 +210,6 @@ static QString msgReaderError(const QXmlStreamReader &reader, const QString &wha return message; } -static QString msgReaderError(const QXmlStreamReader &reader) -{ - return msgReaderError(reader, reader.errorString()); -} - static QString msgInvalidVersion(const QStringRef &version, const QString &package = QString()) { QString result; @@ -238,7 +233,7 @@ bool Handler::parse(QXmlStreamReader &reader) switch (reader.readNext()) { case QXmlStreamReader::NoToken: case QXmlStreamReader::Invalid: - qCWarning(lcShiboken).noquote().nospace() << msgReaderError(reader); + m_error = msgReaderError(reader, reader.errorString()); return false; case QXmlStreamReader::StartElement: if (!startElement(reader.name(), reader.attributes())) { diff --git a/sources/shiboken2/ApiExtractor/typesystem_p.h b/sources/shiboken2/ApiExtractor/typesystem_p.h index 882cf3fab..cbca7a557 100644 --- a/sources/shiboken2/ApiExtractor/typesystem_p.h +++ b/sources/shiboken2/ApiExtractor/typesystem_p.h @@ -140,6 +140,8 @@ public: bool parse(QXmlStreamReader &reader); + QString errorString() const { return m_error; } + private: bool startElement(const QStringRef& localName, const QXmlStreamAttributes& atts); bool handleSmartPointerEntry(StackElement *element, -- cgit v1.2.3