]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: buffer - Add buffer_clear_safe().
authorStephan Bosch <stephan.bosch@open-xchange.com>
Thu, 6 Oct 2022 23:11:46 +0000 (01:11 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 27 Jan 2023 09:34:54 +0000 (09:34 +0000)
src/lib/buffer.c
src/lib/buffer.h

index 64255b5027eea0bf153e2e699ce87de62131f369..91123de15bbb3d69f8b8095f16edbf89e4db8fe0 100644 (file)
@@ -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 =
index f6c26df93abd788cd876bf6e7eb1955da4080ad4..69b3a1319c8a2e6a91959caa4ea418e4e8eb31b3 100644 (file)
@@ -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;