summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2010-08-24 16:26:33 (GMT)
committerRemko Tronçon <git@el-tramo.be>2010-08-24 16:26:33 (GMT)
commitbe0d72c3ad4790447dfb9d0c439971cfd7dcc2fc (patch)
tree6945d28a21203bbfceca5a0433c7534e98e15fae /Swiften/Parser/LibXMLParser.cpp
parente7089e0c45e43af5aa39f9d1e5d7582c830d3fbf (diff)
downloadswift-be0d72c3ad4790447dfb9d0c439971cfd7dcc2fc.zip
swift-be0d72c3ad4790447dfb9d0c439971cfd7dcc2fc.tar.bz2
Work around LibXML failing on namespace errors/warnings.
Diffstat (limited to 'Swiften/Parser/LibXMLParser.cpp')
-rw-r--r--Swiften/Parser/LibXMLParser.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/Swiften/Parser/LibXMLParser.cpp b/Swiften/Parser/LibXMLParser.cpp
index b5f3e53..7fe13fe 100644
--- a/Swiften/Parser/LibXMLParser.cpp
+++ b/Swiften/Parser/LibXMLParser.cpp
@@ -31,7 +31,7 @@ static void handleCharacterData(void* client, const xmlChar* data, int len) {
static_cast<XMLParserClient*>(client)->handleCharacterData(String(reinterpret_cast<const char*>(data), len));
}
-static void handleError(void*, const char*, ... ) {
+static void handleError(void*, const char* /*m*/, ... ) {
/*
va_list args;
va_start(args, m);
@@ -65,7 +65,16 @@ LibXMLParser::~LibXMLParser() {
}
bool LibXMLParser::parse(const String& data) {
- return xmlParseChunk(context_, data.getUTF8Data(), data.getUTF8Size(), false) == XML_ERR_OK;
+ if (xmlParseChunk(context_, data.getUTF8Data(), data.getUTF8Size(), false) == XML_ERR_OK) {
+ return true;
+ }
+ xmlError* error = xmlCtxtGetLastError(context_);
+ if (error->code == XML_WAR_NS_URI || error->code == XML_WAR_NS_URI_RELATIVE) {
+ xmlCtxtResetLastError(context_);
+ context_->errNo = XML_ERR_OK;
+ return true;
+ }
+ return false;
}
}