summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2024-01-11 15:48:10 +0100
committerTor Egge <Tor.Egge@online.no>2024-01-11 15:48:10 +0100
commit0f6b8e5bf0f4a26705542fc771bb4fd65d5974a6 (patch)
treeeada0408b41f69381a41c478e5d34ce6ff795116 /searchlib
parent1cd0dd73f86ef05bf3ea5bcead430b6a9e112df9 (diff)
Handle deserialize bitvector after alignment change.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/common/bitvector.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/searchlib/src/vespa/searchlib/common/bitvector.cpp b/searchlib/src/vespa/searchlib/common/bitvector.cpp
index 598bc01da9a..6798767dc90 100644
--- a/searchlib/src/vespa/searchlib/common/bitvector.cpp
+++ b/searchlib/src/vespa/searchlib/common/bitvector.cpp
@@ -421,10 +421,21 @@ operator>>(nbostream &in, AllocatedBitVector &bv)
in >> size >> cachedHits >> fileBytes;
assert(size <= std::numeric_limits<BitVector::Index>::max());
assert(cachedHits <= size || ! bv.isValidCount(cachedHits));
- if (bv.size() != size)
+ if (bv.size() != size) {
bv.resize(size);
- assert(bv.getFileBytes() == fileBytes);
- in.read(bv.getStart(), bv.getFileBytes());
+ }
+ size_t expected_file_bytes = bv.getFileBytes();
+ size_t read_size = fileBytes;
+ size_t skip_size = 0;
+ if (expected_file_bytes < fileBytes) {
+ read_size = expected_file_bytes;
+ skip_size = fileBytes - expected_file_bytes;
+ }
+ in.read(bv.getStart(), read_size);
+ if (skip_size != 0) {
+ std::vector<char> dummy(skip_size);
+ in.read(dummy.data(), skip_size);
+ }
assert(bv.testBit(size));
bv.setTrueBits(cachedHits);
return in;