From: Victor Julien Date: Fri, 24 Nov 2023 15:12:47 +0000 (+0100) Subject: membuffer: use buffer pointer as flexible array member X-Git-Tag: suricata-7.0.7~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=376c4b8a2bde5863482d482c81d078fa81484b7b;p=thirdparty%2Fsuricata.git membuffer: use buffer pointer as flexible array member (cherry picked from commit 9c3669b03fc3903c30ced9088361e74fd4aec04f) An additional change was made to correct an ASAN issue -- the membuffer is reset following allocation in MemBufferCreateNew(). --- diff --git a/src/util-buffer.c b/src/util-buffer.c index 71a92f7b62..5b52a05dc4 100644 --- a/src/util-buffer.c +++ b/src/util-buffer.c @@ -42,14 +42,12 @@ MemBuffer *MemBufferCreateNew(uint32_t size) size_t total_size = size + sizeof(MemBuffer); - MemBuffer *buffer = SCMalloc(total_size); + MemBuffer *buffer = SCCalloc(1, total_size); if (unlikely(buffer == NULL)) { sc_errno = SC_ENOMEM; return NULL; } buffer->size = size; - buffer->buffer = (uint8_t *)buffer + sizeof(MemBuffer); - return buffer; } @@ -75,7 +73,6 @@ int MemBufferExpand(MemBuffer **buffer, uint32_t expand_by) { } *buffer = tbuffer; (*buffer)->size += expand_by; - (*buffer)->buffer = (uint8_t *)tbuffer + sizeof(MemBuffer); SCLogDebug("expanded buffer by %u, size is now %u", expand_by, (*buffer)->size); return 0; diff --git a/src/util-buffer.h b/src/util-buffer.h index a653ee0444..e58a790d7b 100644 --- a/src/util-buffer.h +++ b/src/util-buffer.h @@ -25,9 +25,9 @@ #define __UTIL_BUFFER_H__ typedef struct MemBuffer_ { - uint8_t *buffer; - uint32_t size; - uint32_t offset; + uint32_t size; + uint32_t offset; + uint8_t buffer[]; } MemBuffer; MemBuffer *MemBufferCreateNew(uint32_t size);