summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com>2022-06-22 16:34:06 +0200
committerGitHub <noreply@github.com>2022-06-22 16:34:06 +0200
commitc947ce8f8161cc75525cab18a7522dc1483c3a26 (patch)
treed6fefe08529e4b2aaef101dbb01772a0de087dc3
parent1535883c7a43c6ed90b1d971b9c0d76177df1728 (diff)
parente67bfd93f1cff7eedcc64dfc7b62cc771dd7bcd9 (diff)
Merge pull request #23200 from vespa-engine/havardpe/fix-more-stuff
fix more undefined behavior
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/fileconfigmanager.cpp4
-rw-r--r--searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp7
-rw-r--r--searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/common/geo_location_parser.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/common/sortresults.cpp14
-rw-r--r--searchlib/src/vespa/searchlib/test/imported_attribute_fixture.cpp5
-rw-r--r--vdslib/src/tests/distribution/distributiontest.cpp2
-rw-r--r--vespalib/src/vespa/vespalib/stllike/asciistream.cpp22
8 files changed, 35 insertions, 25 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/fileconfigmanager.cpp b/searchcore/src/vespa/searchcore/proton/server/fileconfigmanager.cpp
index 918a7ceff1e..2c758ee712f 100644
--- a/searchcore/src/vespa/searchcore/proton/server/fileconfigmanager.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/fileconfigmanager.cpp
@@ -159,7 +159,9 @@ ConfigFile::deserialize(nbostream &stream)
stream >> sz;
_content.resize(sz);
assert(stream.size() >= sz);
- memcpy(_content.data(), stream.peek(), sz);
+ if (sz > 0) {
+ memcpy(_content.data(), stream.peek(), sz);
+ }
stream.adjustReadPos(sz);
return stream;
}
diff --git a/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp b/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp
index 92c3da40fe9..90127e9ae7b 100644
--- a/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp
+++ b/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp
@@ -21,6 +21,7 @@
#include <vespa/vespalib/data/databuffer.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/vespalib/util/compress.h>
+#include <vespa/vespalib/util/memory.h>
#include <vespa/vespalib/stllike/asciistream.h>
#include <limits>
#include <cmath>
@@ -184,8 +185,8 @@ MemAttr::bufEqual(const Buffer &lhs, const Buffer &rhs) const
return true;
if (!EXPECT_TRUE(lhs->getDataLen() == rhs->getDataLen()))
return false;
- if (!EXPECT_TRUE(memcmp(lhs->getData(), rhs->getData(),
- lhs->getDataLen()) == 0))
+ if (!EXPECT_TRUE(vespalib::memcmp_safe(lhs->getData(), rhs->getData(),
+ lhs->getDataLen()) == 0))
return false;
return true;
}
@@ -480,7 +481,7 @@ EnumeratedSaveTest::getSearch(const V &vec, const T &term, bool prefix)
buildTermQuery(query, vec.getName(), ss.str(), prefix);
return (static_cast<const AttributeVector &>(vec)).
- getSearch(vespalib::stringref(&query[0], query.size()),
+ getSearch(vespalib::stringref(query.data(), query.size()),
SearchContextParams());
}
diff --git a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.cpp b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.cpp
index c17627a5026..d8426ce1a45 100644
--- a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.cpp
@@ -20,8 +20,8 @@ PostingListSearchContext(const IEnumStoreDictionary& dictionary,
const ISearchContext &baseSearchCtx)
: _dictionary(dictionary),
_frozenDictionary(_dictionary.get_has_btree_dictionary() ? _dictionary.get_posting_dictionary().getFrozenView() : FrozenDictionary()),
- _lowerDictItr(BTreeNode::Ref(), _frozenDictionary.getAllocator()),
- _upperDictItr(BTreeNode::Ref(), _frozenDictionary.getAllocator()),
+ _lowerDictItr(_dictionary.get_has_btree_dictionary() ? DictionaryConstIterator(BTreeNode::Ref(), _frozenDictionary.getAllocator()) : DictionaryConstIterator()),
+ _upperDictItr(_dictionary.get_has_btree_dictionary() ? DictionaryConstIterator(BTreeNode::Ref(), _frozenDictionary.getAllocator()) : DictionaryConstIterator()),
_uniqueValues(0u),
_docIdLimit(docIdLimit),
_dictSize(_frozenDictionary.size()),
diff --git a/searchlib/src/vespa/searchlib/common/geo_location_parser.cpp b/searchlib/src/vespa/searchlib/common/geo_location_parser.cpp
index 8794169b4a6..d829e1b93e4 100644
--- a/searchlib/src/vespa/searchlib/common/geo_location_parser.cpp
+++ b/searchlib/src/vespa/searchlib/common/geo_location_parser.cpp
@@ -15,7 +15,7 @@ LOG_SETUP(".searchlib.common.geo_location_parser");
namespace {
int getInt(const char * &p) {
- int val;
+ uint32_t val;
bool isminus;
val = 0;
isminus = false;
diff --git a/searchlib/src/vespa/searchlib/common/sortresults.cpp b/searchlib/src/vespa/searchlib/common/sortresults.cpp
index f1756712d2c..59a47dd3312 100644
--- a/searchlib/src/vespa/searchlib/common/sortresults.cpp
+++ b/searchlib/src/vespa/searchlib/common/sortresults.cpp
@@ -209,9 +209,9 @@ FastS_SortSpec::realloc(uint32_t n, size_t & variableWidth, uint32_t & available
variableWidth *= 2;
available += variableWidth * n;
dataSize += variableWidth * n;
- uint32_t byteUsed = mySortData - &_binarySortData[0];
+ uint32_t byteUsed = mySortData - _binarySortData.data();
_binarySortData.resize(dataSize);
- return &_binarySortData[0] + byteUsed;
+ return _binarySortData.data() + byteUsed;
}
void
@@ -237,7 +237,7 @@ FastS_SortSpec::initSortData(const RankedHit *hits, uint32_t n)
uint32_t dataSize = (fixedWidth + variableWidth) * n;
uint32_t available = dataSize;
_binarySortData.resize(dataSize);
- uint8_t *mySortData = &_binarySortData[0];
+ uint8_t *mySortData = _binarySortData.data();
_sortDataArray.resize(n);
@@ -342,7 +342,7 @@ void
FastS_SortSpec::copySortData(uint32_t offset, uint32_t n,
uint32_t *idx, char *buf)
{
- const uint8_t * sortData = &_binarySortData[0];
+ const uint8_t * sortData = _binarySortData.data();
uint32_t totalLen = 0;
for (uint32_t i = offset; i < (offset + n); ++i, ++idx) {
const uint8_t * src = sortData + _sortDataArray[i]._idx;
@@ -378,7 +378,7 @@ inline int
FastS_SortSpec::Compare(const FastS_SortSpec *self, const SortData &a,
const SortData &b)
{
- const uint8_t * ref = &(self->_binarySortData[0]);
+ const uint8_t * ref = self->_binarySortData.data();
uint32_t len = a._len < b._len ? a._len : b._len;
int retval = memcmp(ref + a._idx,
ref + b._idx, len);
@@ -448,10 +448,10 @@ void
FastS_SortSpec::sortResults(RankedHit a[], uint32_t n, uint32_t topn)
{
initSortData(a, n);
- SortData * sortData = &_sortDataArray[0];
+ SortData * sortData = _sortDataArray.data();
{
Array<uint32_t> radixScratchPad(n, Alloc::alloc(0, MMAP_LIMIT));
- search::radix_sort(SortDataRadix(&_binarySortData[0]), StdSortDataCompare(&_binarySortData[0]), SortDataEof(), 1, sortData, n, &radixScratchPad[0], 0, 96, topn);
+ search::radix_sort(SortDataRadix(_binarySortData.data()), StdSortDataCompare(_binarySortData.data()), SortDataEof(), 1, sortData, n, radixScratchPad.data(), 0, 96, topn);
}
for (uint32_t i(0), m(_sortDataArray.size()); i < m; ++i) {
a[i]._rankValue = _sortDataArray[i]._rankValue;
diff --git a/searchlib/src/vespa/searchlib/test/imported_attribute_fixture.cpp b/searchlib/src/vespa/searchlib/test/imported_attribute_fixture.cpp
index d240e5a7c6c..d1bb464fc37 100644
--- a/searchlib/src/vespa/searchlib/test/imported_attribute_fixture.cpp
+++ b/searchlib/src/vespa/searchlib/test/imported_attribute_fixture.cpp
@@ -10,10 +10,7 @@ namespace search {
namespace {
struct MockReadGuard : public IDocumentMetaStoreContext::IReadGuard {
- virtual const search::IDocumentMetaStore &get() const override {
- search::IDocumentMetaStore *nullStore = nullptr;
- return static_cast<search::IDocumentMetaStore &>(*nullStore);
- }
+ virtual const search::IDocumentMetaStore &get() const override { abort(); }
};
}
diff --git a/vdslib/src/tests/distribution/distributiontest.cpp b/vdslib/src/tests/distribution/distributiontest.cpp
index 4e050affec6..dee620738c6 100644
--- a/vdslib/src/tests/distribution/distributiontest.cpp
+++ b/vdslib/src/tests/distribution/distributiontest.cpp
@@ -369,7 +369,7 @@ TEST(DistributionTest, testHighSplitBit)
for (uint32_t bits = 33; bits < 36; ++bits) {
uint64_t base = 0x23456789;
- base |= (1 << bits);
+ base |= (1L << bits);
document::BucketId bid1 = document::BucketId(bits, base);
document::BucketId bid2 = document::BucketId(bits, base);
diff --git a/vespalib/src/vespa/vespalib/stllike/asciistream.cpp b/vespalib/src/vespa/vespalib/stllike/asciistream.cpp
index 6b673363d2d..caacec196bd 100644
--- a/vespalib/src/vespa/vespalib/stllike/asciistream.cpp
+++ b/vespalib/src/vespa/vespalib/stllike/asciistream.cpp
@@ -429,22 +429,32 @@ printInt(unsigned long long r, char * tmp, uint8_t i)
return i;
}
+unsigned long long normalize(long long v, bool &negative) {
+ if (v < 0) {
+ negative = true;
+ if (v == std::numeric_limits<long long>::min()) {
+ // according to UBSAN:
+ // negation of -9223372036854775808 cannot be represented in type 'long long int'; cast to an unsigned type to negate this value to itself
+ return v;
+ }
+ return -v;
+ }
+ return v;
+}
+
}
asciistream &
-asciistream::operator << (long long v)
+asciistream::operator << (long long v_in)
{
char tmp[72];
uint8_t i(sizeof(tmp));
bool negative(false);
- if (v == 0) {
+ if (v_in == 0) {
tmp[--i] = '0';
} else {
- if (v < 0) {
- v = -v;
- negative = true;
- }
+ unsigned long long v = normalize(v_in, negative);
switch (_base) {
case 2:
i = printInt<2>(v, tmp, i); break;