From: Stephan Bosch Date: Thu, 6 Oct 2022 23:11:46 +0000 (+0200) Subject: lib: buffer - Add buffer_clear_safe(). X-Git-Tag: 2.4.0~3152 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ffb404856438bf2d9a626ccd10d74d76c20bb504;p=thirdparty%2Fdovecot%2Fcore.git lib: buffer - Add buffer_clear_safe(). --- diff --git a/src/lib/buffer.c b/src/lib/buffer.c index 64255b5027..91123de15b 100644 --- a/src/lib/buffer.c +++ b/src/lib/buffer.c @@ -3,6 +3,7 @@ /* @UNSAFE: whole file */ #include "lib.h" +#include "safe-memset.h" #include "buffer.h" struct real_buffer { @@ -413,6 +414,14 @@ void buffer_set_used_size(buffer_t *_buf, size_t used_size) buf->used = used_size; } +void buffer_clear_safe(buffer_t *_buf) +{ + struct real_buffer *buf = container_of(_buf, struct real_buffer, buf); + + safe_memset(buf->w_buffer, 0, I_MAX(buf->used, buf->dirty)); + buffer_clear(_buf); +} + size_t buffer_get_size(const buffer_t *_buf) { const struct real_buffer *buf = diff --git a/src/lib/buffer.h b/src/lib/buffer.h index f6c26df93a..69b3a1319c 100644 --- a/src/lib/buffer.h +++ b/src/lib/buffer.h @@ -116,6 +116,8 @@ static inline void buffer_clear(buffer_t *buf) { buffer_set_used_size(buf, 0); } +/* Clear the buffer, but also make sure any contents is zeroed out. */ +void buffer_clear_safe(buffer_t *_buf); /* Returns the current buffer size. */ size_t buffer_get_size(const buffer_t *buf) ATTR_PURE;