diff --git a/src/img/img/imgStream.cc b/src/img/img/imgStream.cc index 13c9e2a21..4f6833aca 100644 --- a/src/img/img/imgStream.cc +++ b/src/img/img/imgStream.cc @@ -233,14 +233,14 @@ ImageProxy::get_image () const if (! m_byte_data.empty ()) { std::list::const_iterator s = m_byte_data.begin (); - for (size_t i = 0; i < m_height; ++i) { + for (size_t i = 0; i < m_height && s != m_byte_data.end (); ++i) { string_to_pixels (img.get (), *s++, i, m_width, m_color); } } else { std::list::const_iterator s = m_data.begin (); - for (size_t i = 0; i < m_height; ++i) { + for (size_t i = 0; i < m_height && s != m_data.end (); ++i) { string_to_pixels (img.get (), *s++, i, m_width, m_color); } diff --git a/src/tl/tl/tlXMLParser.cc b/src/tl/tl/tlXMLParser.cc index 7bf20e599..1edba7806 100644 --- a/src/tl/tl/tlXMLParser.cc +++ b/src/tl/tl/tlXMLParser.cc @@ -403,9 +403,15 @@ public: void setDocumentLocator (QXmlLocator *locator); + const tl::XMLLocatedException *exception () const + { + return m_error.get (); + } + private: QXmlLocator *mp_locator; XMLStructureHandler *mp_struct_handler; + std::unique_ptr m_error; }; // -------------------------------------------------------------------------------------------------------- @@ -479,13 +485,17 @@ SAXHandler::characters (const QString &t) bool SAXHandler::error (const QXmlParseException &ex) { - throw tl::XMLLocatedException (tl::to_string (ex.message ()), ex.lineNumber (), ex.columnNumber ()); + m_error.reset (new tl::XMLLocatedException (tl::to_string (ex.message ()), ex.lineNumber (), ex.columnNumber ())); + // stop reading + return false; } bool SAXHandler::fatalError (const QXmlParseException &ex) { - throw tl::XMLLocatedException (tl::to_string (ex.message ()), ex.lineNumber (), ex.columnNumber ()); + m_error.reset (new tl::XMLLocatedException (tl::to_string (ex.message ()), ex.lineNumber (), ex.columnNumber ())); + // stop reading + return false; } bool @@ -765,7 +775,10 @@ XMLParser::parse (XMLSource &source, XMLStructureHandler &struct_handler) mp_data->setContentHandler (&handler); mp_data->setErrorHandler (&handler); - mp_data->parse (source.source (), false /*=not incremental*/); + bool result = mp_data->parse (source.source (), false /*=not incremental*/); + if (! result && handler.exception ()) { + throw tl::XMLLocatedException (*handler.exception ()); + } } bool