abseil / abseil/abseil-cpp

Is it expected such test doesn't work with sanitizer?

Open
#1,422 5 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
18.1k
Forks
3.2k
Avg merge
20h 36m
Merged PRs (30d)
1

Description

### Describe the issue

reserve to smaller than size capacity makes unsigned overflow in reset_reserved_growth
```cpp
void reset_reserved_growth(size_t reservation, size_t size) {
reserved_growth_ = reservation - size;
}
```

```cpp
TEST(Table, ReservedGrowthUpdatesWhenTableDoesntGrow2) {
IntTable t;
for (int i = 0; i < 8; ++i) t.insert(i);
// Want to insert twice without invalidating iterators so reserve.
const size_t cap = t.capacity();
t.reserve(3);
// We want to be testing the case in which the reserve doesn't grow the table.
ASSERT_EQ(cap, t.capacity());
auto it = t.find(0);
t.insert(100);
t.insert(200);
t.insert(300);
// `it` should have been invalidated.
EXPECT_EQ(*it, 0); // should be some expect_death
}
```

Is it expected?

### Steps to reproduce the problem

Run test

### What version of Abseil are you using?

master

### What operating system and version are you using?

Linux 6.2.6-arch1-1

### What compiler and version are you using?

clang version 15.0.7
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/12.2.1
Found candidate GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1
Selected GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64

### What build system are you using?

cmake version 3.26.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

### Additional context

I think fix should be like make reset_reserved_growth call inside raw_hash_set::resize
https://github.com/abseil/abseil-cpp/pull/1423

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.