diff options
-rw-r--r-- | include/xmlreader/span.hxx | 4 | ||||
-rw-r--r-- | include/xmlreader/xmlreader.hxx | 2 | ||||
-rw-r--r-- | xmlreader/source/xmlreader.cxx | 6 |
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; } |