From d849e9de98266e8ce35ad10dd88bd254bbed3db3 Mon Sep 17 00:00:00 2001 From: "Markus F.X.J. Oberhumer" Date: Wed, 31 Jan 2024 16:48:55 +0100 Subject: [PATCH] src: add some bounds checking to MemBufferBase --- src/util/membuffer.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/util/membuffer.h b/src/util/membuffer.h index d63de264..9f18b999 100644 --- a/src/util/membuffer.h +++ b/src/util/membuffer.h @@ -55,6 +55,17 @@ public: // HINT: for fully bound-checked pointer use XSPAN_S from xspan.h operator pointer() const noexcept { return ptr; } + // array access + reference operator[](ptrdiff_t i) const may_throw { + if very_unlikely (i < 0 || mem_size(sizeof(element_type), i) >= size_in_bytes) + throwCantPack("MemBuffer invalid index %td (%u bytes)", i, size_in_bytes); + return ptr[i]; + } + // dereference + reference operator*() const DELETED_FUNCTION; + // arrow operator + pointer operator->() const DELETED_FUNCTION; + // membuffer + n -> pointer template typename std::enable_if::value, pointer>::type operator+(U n) const {