diff options
author | Tor Egge <Tor.Egge@online.no> | 2024-01-11 15:48:10 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2024-01-11 15:48:10 +0100 |
commit | 0f6b8e5bf0f4a26705542fc771bb4fd65d5974a6 (patch) | |
tree | eada0408b41f69381a41c478e5d34ce6ff795116 /searchlib | |
parent | 1cd0dd73f86ef05bf3ea5bcead430b6a9e112df9 (diff) |
Handle deserialize bitvector after alignment change.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/common/bitvector.cpp | 17 |
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; |