diff --git a/src/core/lib/gprpp/chunked_vector.h b/src/core/lib/gprpp/chunked_vector.h index 2080655d0a6..3bbe921366a 100644 --- a/src/core/lib/gprpp/chunked_vector.h +++ b/src/core/lib/gprpp/chunked_vector.h @@ -113,7 +113,7 @@ class ChunkedVector { T* operator->() const { return &*chunk_->data[n_]; } ForwardIterator& operator++() { ++n_; - if (n_ == chunk_->count) { + while (chunk_ != nullptr && n_ == chunk_->count) { chunk_ = chunk_->next; n_ = 0; } @@ -140,7 +140,7 @@ class ChunkedVector { const T* operator->() const { return &*chunk_->data[n_]; } ConstForwardIterator& operator++() { ++n_; - if (n_ == chunk_->count) { + while (chunk_ != nullptr && n_ == chunk_->count) { chunk_ = chunk_->next; n_ = 0; } diff --git a/test/core/gprpp/chunked_vector_corpora/testcase-5405829431427072 b/test/core/gprpp/chunked_vector_corpora/testcase-5405829431427072 new file mode 100644 index 00000000000..6ec84ffac7c --- /dev/null +++ b/test/core/gprpp/chunked_vector_corpora/testcase-5405829431427072 @@ -0,0 +1,79 @@ +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + value: 2 + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + value: 537540660 + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + value: 28929 + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + emplace_back { + } +} +actions { + pop_back { + } +}