diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2021-10-19 15:32:08 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2021-10-25 14:51:44 -0400 |
commit | d9f82e931394efed68858eb7c7bb5832ad888482 (patch) | |
tree | 2c8d23aac0b396bcfe433a26f16c2d80e9650423 /gdbsupport | |
parent | 61d7f128e6ea37af805be4e365f5879b0d42bb93 (diff) | |
download | gdb-d9f82e931394efed68858eb7c7bb5832ad888482.zip gdb-d9f82e931394efed68858eb7c7bb5832ad888482.tar.gz gdb-d9f82e931394efed68858eb7c7bb5832ad888482.tar.bz2 |
gdbsupport: add assertions in array_view
Add assertions to ensure we don't access an array_view out of bounds.
Enable these assertions only when _GLIBCXX_DEBUG is set, as we did for
gdb::optional.
Change-Id: Iffaee38252405073735ed123c8e57fde6b2c6be3
Diffstat (limited to 'gdbsupport')
-rw-r--r-- | gdbsupport/array-view.h | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/gdbsupport/array-view.h b/gdbsupport/array-view.h index c41fd62..ab1d032 100644 --- a/gdbsupport/array-view.h +++ b/gdbsupport/array-view.h @@ -162,9 +162,19 @@ public: constexpr const T *end () const noexcept { return m_array + m_size; } /*constexpr14*/ reference operator[] (size_t index) noexcept - { return m_array[index]; } + { +#if defined(_GLIBCXX_DEBUG) + gdb_assert (index < m_size); +#endif + return m_array[index]; + } constexpr const_reference operator[] (size_t index) const noexcept - { return m_array[index]; } + { +#if defined(_GLIBCXX_DEBUG) + gdb_assert (index < m_size); +#endif + return m_array[index]; + } constexpr size_type size () const noexcept { return m_size; } constexpr bool empty () const noexcept { return m_size == 0; } @@ -173,12 +183,22 @@ public: /* Return a new array view over SIZE elements starting at START. */ constexpr array_view<T> slice (size_type start, size_type size) const noexcept - { return {m_array + start, size}; } + { +#if defined(_GLIBCXX_DEBUG) + gdb_assert (start + size <= m_size); +#endif + return {m_array + start, size}; + } /* Return a new array view over all the elements after START, inclusive. */ constexpr array_view<T> slice (size_type start) const noexcept - { return {m_array + start, size () - start}; } + { +#if defined(_GLIBCXX_DEBUG) + gdb_assert (start <= m_size); +#endif + return {m_array + start, size () - start}; + } private: T *m_array; |