fix(PIBitArray): guard pop_back() against empty array

pop_back() called resize(size_ - 1) without checking for empty.
On empty array, uint underflow produced UINT_MAX, causing
bytesInBits(UINT_MAX) overflow and subsequent OOB access.
pop_front() already had this guard; pop_back() was missing it.
This commit is contained in:
2026-08-06 10:18:51 +03:00
parent d7d9f8588d
commit 7ce0be4bab
+5 -2
View File
@@ -5,7 +5,7 @@
//! \~russian Упакованный массив битов //! \~russian Упакованный массив битов
/* /*
PIP - Platform Independent Primitives PIP - Platform Independent Primitives
Packed bit array Packed bit array
Ivan Pelipenko peri4ko@yandex.ru Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
@@ -173,7 +173,10 @@ public:
//! \~english Remove one bit from the end of array. //! \~english Remove one bit from the end of array.
//! \~russian Удаляет один бит с конца массива. //! \~russian Удаляет один бит с конца массива.
PIBitArray & pop_back() { return resize(size_ - 1); } PIBitArray & pop_back() {
if (size_ == 0) return *this;
return resize(size_ - 1);
}
//! \~english Remove one bit from the beginning of array. //! \~english Remove one bit from the beginning of array.
//! \~russian Удаляет один бит с начала массива. //! \~russian Удаляет один бит с начала массива.