Merge pull request #1002 from nogitsune-youkai/integer-overflow-assert

Fix: Add asserts to prevent undefined behavior on empty containers
This commit is contained in:
MihailRis 2026-10-01 12:13:03 +03:00 • committed by GitHub
commit f90750c066
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,5 +1,6 @@
#pragma once #pragma once
#include <cassert>
#include <cstddef> #include <cstddef>
#include <initializer_list> #include <initializer_list>
#include <stdexcept> #include <stdexcept>
@ -74,6 +75,7 @@ namespace util {
} }
void pop_back() noexcept { void pop_back() noexcept {
assert(!empty() && "pop_back() called on empty stack_vector");
if (size_ > 0) { if (size_ > 0) {
data_.ptr()[size_ - 1].~T(); data_.ptr()[size_ - 1].~T();
--size_; --size_;
@ -110,18 +112,22 @@ namespace util {
} }
T& front() { T& front() {
assert(!empty() && "front() called on empty stack_vector");
return data_.ptr()[0]; return data_.ptr()[0];
} }
T& back() { T& back() {
assert(!empty() && "back() called on empty stack_vector");
return data_.ptr()[size_ - 1]; return data_.ptr()[size_ - 1];
} }
const T& front() const { const T& front() const {
assert(!empty() && "front() called on empty stack_vector");
return data_.ptr()[0]; return data_.ptr()[0];
} }
const T& back() const { const T& back() const {
assert(!empty() && "back() called on empty stack_vector");
return data_.ptr()[size_ - 1]; return data_.ptr()[size_ - 1];
} }