From 0d402556af53790adb06380b4b04ea421d14d09e Mon Sep 17 00:00:00 2001 From: Luboš Luňák Date: Sun, 20 Feb 2022 18:34:13 +0100 Subject: fix usage of std::lower_bound() in SfxItemPool (tdf#81765) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The function expects elements starting from smallest to the biggest, and finds the first one that is not smaller than the one searched for. That means that all items remaining will not be smaller, and thus end of search is when items compare larger. Comparing remaining items as smaller means searching until the end. Change-Id: If5cf5c18951abf987ddbbf201f49cfb195e36d32 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130220 Tested-by: Jenkins Reviewed-by: Noel Grandin Reviewed-by: Luboš Luňák --- sc/source/core/data/attrib.cxx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'sc/source/core/data/attrib.cxx') diff --git a/sc/source/core/data/attrib.cxx b/sc/source/core/data/attrib.cxx index e7cf37d4b741..7173bcb61217 100644 --- a/sc/source/core/data/attrib.cxx +++ b/sc/source/core/data/attrib.cxx @@ -717,7 +717,7 @@ bool ScCondFormatItem::operator==( const SfxPoolItem& rCmp ) const auto const & other = static_cast(rCmp); if (maIndex.empty() && other.maIndex.empty()) return true; - // memcmp is faster than operator< on std::vector + // memcmp is faster than operator== on std::vector return maIndex.size() == other.maIndex.size() && memcmp(&maIndex.front(), &other.maIndex.front(), maIndex.size() * sizeof(sal_uInt32)) == 0; } @@ -732,6 +732,8 @@ bool ScCondFormatItem::operator<( const SfxPoolItem& rCmp ) const if (maIndex.empty() && other.maIndex.empty()) return false; // memcmp is faster than operator< on std::vector + // Note that on little-endian this results in a confusing ordering (256 < 1), + // which technically doesn't matter as the ordering may be arbitrary. return memcmp(&maIndex.front(), &other.maIndex.front(), maIndex.size() * sizeof(sal_uInt32)) < 0; } -- cgit v1.2.3