diff --git a/src/lib-sieve/sieve-message.c b/src/lib-sieve/sieve-message.c index c60a6f71ea0b650c98f6da053855d0958093315e..8b5577329dd8cf13df4e4212e09f3958fd81f071 100644 --- a/src/lib-sieve/sieve-message.c +++ b/src/lib-sieve/sieve-message.c @@ -1499,6 +1499,10 @@ int sieve_message_body_get_raw i_stream_get_error(input)); return SIEVE_EXEC_TEMP_FAILURE; } + + /* Add terminating NUL to the body part buffer */ + buffer_append_c(buf, '\0'); + } else { buf = msgctx->raw_body; } @@ -1506,14 +1510,16 @@ int sieve_message_body_get_raw /* Clear result array */ array_clear(&msgctx->return_body_parts); - if ( buf->used > 0 ) { - /* Add terminating NUL to the body part buffer */ - buffer_append_c(buf, '\0'); + if ( buf->used > 1 ) { + const char *data = (const char *)buf->data; + size_t size = buf->used - 1; + + i_assert( data[size] == '\0' ); /* Add single item to the result */ return_part = array_append_space(&msgctx->return_body_parts); - return_part->content = buf->data; - return_part->size = buf->used - 1; + return_part->content = data; + return_part->size = size; } /* Return the array of body items */