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 {
+  }
+}