summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/xmlreader/span.hxx4
-rw-r--r--include/xmlreader/xmlreader.hxx2
-rw-r--r--xmlreader/source/xmlreader.cxx6
3 files changed, 8 insertions, 4 deletions
diff --git a/include/xmlreader/span.hxx b/include/xmlreader/span.hxx
index f56059b96274..a3da663e5a71 100644
--- a/include/xmlreader/span.hxx
+++ b/include/xmlreader/span.hxx
@@ -24,9 +24,9 @@
#include <cstddef>
#include <cstring>
+#include <functional>
#include <sal/types.h>
-#include <rtl/string.h>
#include <xmlreader/detail/xmlreaderdllapi.hxx>
namespace rtl { class OUString; }
@@ -53,7 +53,7 @@ struct SAL_WARN_UNUSED OOO_DLLPUBLIC_XMLREADER Span {
bool operator==(Span const & text) const {
return length == text.length
- && memcmp(begin, text.begin, text.length) == 0;
+ && std::memcmp(begin, text.begin, text.length) == 0;
}
bool operator!=(Span const & text) const {
diff --git a/include/xmlreader/xmlreader.hxx b/include/xmlreader/xmlreader.hxx
index a553baeb6c3a..99e889ee0d59 100644
--- a/include/xmlreader/xmlreader.hxx
+++ b/include/xmlreader/xmlreader.hxx
@@ -22,8 +22,8 @@
#include <sal/config.h>
-#include <unordered_map>
#include <stack>
+#include <unordered_map>
#include <vector>
#include <osl/file.h>
diff --git a/xmlreader/source/xmlreader.cxx b/xmlreader/source/xmlreader.cxx
index 95a27a785b5c..918f42a2e1b2 100644
--- a/xmlreader/source/xmlreader.cxx
+++ b/xmlreader/source/xmlreader.cxx
@@ -714,7 +714,11 @@ XmlReader::Result XmlReader::handleEndTag() {
void XmlReader::handleElementEnd() {
assert(!elements_.empty());
- namespaces_.resize(elements_.top().inheritedNamespaces);
+ // remove keys from cache that are no longer valid
+ auto end = elements_.top().inheritedNamespaces;
+ for (auto i = end; i < namespaces_.size(); ++i)
+ cacheNSIds_.erase(namespaces_[i].prefix);
+ namespaces_.resize(end);
elements_.pop();
state_ = elements_.empty() ? State::Done : State::Content;
}