dovecot-2.2-pigeonhole: Fixed several small issues, including a ...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Sun May 20 13:17:10 EEST 2012
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/7f9218fe9fac
changeset: 1626:7f9218fe9fac
user: Stephan Bosch <stephan at rename-it.nl>
date: Wed May 02 01:17:49 2012 +0200
description:
Fixed several small issues, including a few potential segfault bugs, based on static analysis.
Clang static analyzer is happy now.
diffstat:
src/lib-sieve-tool/mail-raw.c | 4 +-
src/lib-sieve/cmd-redirect.c | 5 +-
src/lib-sieve/edit-mail.c | 30 +++++++------
src/lib-sieve/mcht-matches.c | 1 -
src/lib-sieve/plugins/body/ext-body-common.c | 16 +++++--
src/lib-sieve/plugins/editheader/ext-editheader-common.c | 3 +-
src/lib-sieve/plugins/imap4flags/tag-flags.c | 3 +
src/lib-sieve/plugins/include/cmd-include.c | 3 +-
src/lib-sieve/plugins/notify/ext-notify-common.c | 10 +++-
src/lib-sieve/plugins/variables/ext-variables-modifiers.c | 4 +-
src/lib-sieve/plugins/variables/ext-variables-namespaces.c | 2 +-
src/lib-sieve/sieve-address.c | 23 ++++------
src/lib-sieve/sieve-ast.c | 20 +++++----
src/lib-sieve/sieve-ast.h | 6 +-
src/lib-sieve/sieve-commands.h | 2 +-
src/lib-sieve/sieve-script.c | 6 ++-
src/lib-sieve/sieve-validator.c | 8 ++-
src/lib-sieve/sieve.c | 3 +-
src/lib-sievestorage/sieve-storage-quota.c | 3 +-
src/managesieve-login/managesieve-login-settings-plugin.c | 2 +-
src/plugins/lda-sieve/lda-sieve-plugin.c | 8 +--
src/sieve-tools/sieve-dump.c | 2 +-
src/sieve-tools/sieve-filter.c | 3 +-
src/sieve-tools/sieve-test.c | 6 +-
src/sieve-tools/sievec.c | 2 +-
src/testsuite/cmd-test-message.c | 3 +-
src/testsuite/testsuite.c | 2 +-
27 files changed, 95 insertions(+), 85 deletions(-)
diffs (truncated from 666 to 300 lines):
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve-tool/mail-raw.c
--- a/src/lib-sieve-tool/mail-raw.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve-tool/mail-raw.c Wed May 02 01:17:49 2012 +0200
@@ -115,7 +115,7 @@
if (ret > 0 && size >= 5 && memcmp(data, "From ", 5) == 0) {
/* skip until the first LF */
i_stream_skip(input, 5);
- while ((ret = i_stream_read_data(input, &data, &size, 0)) > 0) {
+ while ( i_stream_read_data(input, &data, &size, 0) > 0 ) {
for (i = 0; i < size; i++) {
if (data[i] == '\n')
break;
@@ -223,7 +223,7 @@
{
struct mail_raw *mailr;
struct istream *input = NULL;
- time_t mtime;
+ time_t mtime = (time_t)-1;
const char *sender = NULL;
if ( path == NULL || strcmp(path, "-") == 0 ) {
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/cmd-redirect.c
--- a/src/lib-sieve/cmd-redirect.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/cmd-redirect.c Wed May 02 01:17:49 2012 +0200
@@ -323,7 +323,6 @@
FILE *f;
const unsigned char *data;
size_t size;
- int ret;
/* Just to be sure */
if ( !sieve_smtp_available(senv) ) {
@@ -352,12 +351,14 @@
rfc2822_header_field_write(f, "X-Sieve-Redirected-From", recipient);
/* Pipe the message to the outgoing SMTP transport */
- while ((ret = i_stream_read_data(crlf_input, &data, &size, 0)) > 0) {
+ while (i_stream_read_data(crlf_input, &data, &size, 0) > 0) {
if (fwrite(data, size, 1, f) == 0)
break;
i_stream_skip(crlf_input, size);
}
+ // FIXME: handle stream error. Currently, we have no means to abort here.
+
i_stream_unref(&crlf_input);
i_stream_unref(&input);
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/edit-mail.c
--- a/src/lib-sieve/edit-mail.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/edit-mail.c Wed May 02 01:17:49 2012 +0200
@@ -657,21 +657,23 @@
}
/* Insert header field index items in main list */
- if ( edmail->header_fields_appended != NULL ) {
- if ( edmail->header_fields_appended->prev != NULL ) {
- edmail->header_fields_appended->prev->next = head;
- head->prev = edmail->header_fields_appended->prev;
+ if ( head != NULL && tail != NULL ) {
+ if ( edmail->header_fields_appended != NULL ) {
+ if ( edmail->header_fields_appended->prev != NULL ) {
+ edmail->header_fields_appended->prev->next = head;
+ head->prev = edmail->header_fields_appended->prev;
+ }
+
+ tail->next = edmail->header_fields_appended;
+ edmail->header_fields_appended->prev = tail;
+ } else if ( edmail->header_fields_tail != NULL ) {
+ edmail->header_fields_tail->next = head;
+ head->prev = edmail->header_fields_tail;
+ edmail->header_fields_tail = tail;
+ } else {
+ edmail->header_fields_head = head;
+ edmail->header_fields_tail = tail;
}
-
- tail->next = edmail->header_fields_appended;
- edmail->header_fields_appended->prev = tail;
- } else if ( edmail->header_fields_tail != NULL ) {
- edmail->header_fields_tail->next = head;
- head->prev = edmail->header_fields_tail;
- edmail->header_fields_tail = tail;
- } else {
- edmail->header_fields_head = head;
- edmail->header_fields_tail = tail;
}
/* Rebuild header index */
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/mcht-matches.c
--- a/src/lib-sieve/mcht-matches.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/mcht-matches.c Wed May 02 01:17:49 2012 +0200
@@ -111,7 +111,6 @@
vp = val; /* Value pointer */
kp = key; /* Key pointer */
wp = key; /* Wildcard (key) pointer */
- pvp = val; /* Previous value Pointer */
/* Start match values list if requested */
if ( (mvalues = sieve_match_values_start(mctx->runenv)) != NULL ) {
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/plugins/body/ext-body-common.c
--- a/src/lib-sieve/plugins/body/ext-body-common.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/plugins/body/ext-body-common.c Wed May 02 01:17:49 2012 +0200
@@ -204,7 +204,6 @@
struct istream *input;
unsigned int idx = 0;
bool save_body = FALSE, have_all;
- int ret;
/* First check whether any are missing */
if (ext_body_get_return_parts(ctx, content_types, decode_to_plain)) {
@@ -226,7 +225,7 @@
//parser = message_parser_init_from_parts(parts, input, 0, 0);
parser = message_parser_init(ctx->pool, input, 0, 0);
- while ( (ret = message_parser_parse_next_block(parser, &block)) > 0 ) {
+ while ( message_parser_parse_next_block(parser, &block) > 0 ) {
if ( block.part != prev_part ) {
bool message_rfc822 = FALSE;
@@ -277,6 +276,7 @@
}
/* Save bodies only if we have a wanted content-type */
+ i_assert( body_part != NULL );
save_body = _is_wanted_content_type
(content_types, body_part->content_type);
continue;
@@ -285,9 +285,10 @@
/* Encountered the empty line that indicates the end of the headers and
* the start of the body
*/
- if ( block.hdr->eoh )
+ if ( block.hdr->eoh ) {
+ i_assert( body_part != NULL );
body_part->have_body = TRUE;
- else if ( header_part != NULL ) {
+ } else if ( header_part != NULL ) {
/* Save message/rfc822 header as part content */
if ( block.hdr->continued ) {
buffer_append(ctx->tmp_buffer, block.hdr->value, block.hdr->value_len);
@@ -312,6 +313,8 @@
block.hdr->use_full_value = TRUE;
continue;
}
+
+ i_assert( body_part != NULL );
/* Parse the content type from the Content-type header */
T_BEGIN {
@@ -437,11 +440,14 @@
i_stream_skip(input, hdr_size.physical_size);
/* Read raw message body */
- while ( (ret = i_stream_read_data(input, &data, &size, 0)) > 0 ) {
+ while ( (ret=i_stream_read_data(input, &data, &size, 0)) > 0 ) {
buffer_append(buf, data, size);
i_stream_skip(input, size);
}
+
+ if ( ret == -1 && input->stream_errno != 0 )
+ return FALSE;
} else {
buf = ctx->raw_body;
}
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/plugins/editheader/ext-editheader-common.c
--- a/src/lib-sieve/plugins/editheader/ext-editheader-common.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/plugins/editheader/ext-editheader-common.c Wed May 02 01:17:49 2012 +0200
@@ -52,8 +52,7 @@
bool ext_editheader_load
(const struct sieve_extension *ext, void **context)
{
- struct ext_editheader_config *ext_config =
- (struct ext_editheader_config *) *context;
+ struct ext_editheader_config *ext_config;
struct sieve_instance *svinst = ext->svinst;
const char *protected;
size_t max_header_size;
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/plugins/imap4flags/tag-flags.c
--- a/src/lib-sieve/plugins/imap4flags/tag-flags.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/plugins/imap4flags/tag-flags.c Wed May 02 01:17:49 2012 +0200
@@ -299,6 +299,9 @@
}
}
+ if ( ret < 0 )
+ return flag_list->exec_status;
+
*se_context = (void *) ctx;
return SIEVE_EXEC_OK;
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/plugins/include/cmd-include.c
--- a/src/lib-sieve/plugins/include/cmd-include.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/plugins/include/cmd-include.c Wed May 02 01:17:49 2012 +0200
@@ -279,8 +279,7 @@
ctx_data->script = script;
}
- arg = sieve_ast_arguments_detach(arg, 1);
-
+ (void)sieve_ast_arguments_detach(arg, 1);
return TRUE;
}
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/plugins/notify/ext-notify-common.c
--- a/src/lib-sieve/plugins/notify/ext-notify-common.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/plugins/notify/ext-notify-common.c Wed May 02 01:17:49 2012 +0200
@@ -3,6 +3,7 @@
#include "lib.h"
#include "str.h"
+#include "istream.h"
#include "rfc822-parser.h"
#include "message-parser.h"
#include "message-decoder.h"
@@ -158,7 +159,7 @@
struct message_block block, decoded;
struct istream *input;
bool is_text, save_body;
- int ret;
+ int ret = 1;
/* Return cached result if available */
mctx = ext_notify_get_message_context(this_ext, renv->msgctx);
@@ -171,7 +172,7 @@
/* Get the message stream */
if ( mail_get_stream(renv->msgdata->mail, NULL, NULL, &input) < 0 )
- return FALSE;
+ return NULL;
/* Initialize body decoder */
decoder = message_decoder_init(FALSE);
@@ -179,7 +180,7 @@
parser = message_parser_init(mctx->pool, input, 0, 0);
is_text = TRUE;
save_body = FALSE;
- while ( (ret = message_parser_parse_next_block(parser, &block)) > 0 ) {
+ while ( (ret=message_parser_parse_next_block(parser, &block)) > 0 ) {
if ( block.hdr != NULL || block.size == 0 ) {
/* Decode block */
(void)message_decoder_decode_next_block(decoder, &block, &decoded);
@@ -222,6 +223,9 @@
(void)message_parser_deinit(&parser, &parts);
message_decoder_deinit(&decoder);
+ if ( ret < 0 && input->stream_errno != 0 )
+ return NULL;
+
/* Return status */
return mctx->body_text;
}
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/plugins/variables/ext-variables-modifiers.c
--- a/src/lib-sieve/plugins/variables/ext-variables-modifiers.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/plugins/variables/ext-variables-modifiers.c Wed May 02 01:17:49 2012 +0200
@@ -220,7 +220,7 @@
str_append_str(*result, in);
content = str_c_modifiable(*result);
- content = str_ucase(content);
+ (void)str_ucase(content);
return TRUE;
}
@@ -233,7 +233,7 @@
str_append_str(*result, in);
content = str_c_modifiable(*result);
- content = str_lcase(content);
+ (void)str_lcase(content);
return TRUE;
}
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/plugins/variables/ext-variables-namespaces.c
--- a/src/lib-sieve/plugins/variables/ext-variables-namespaces.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/plugins/variables/ext-variables-namespaces.c Wed May 02 01:17:49 2012 +0200
@@ -90,7 +90,7 @@
const struct sieve_variables_namespace *nspc;
struct arg_namespace_variable *var;
const struct sieve_variable_name *name_element = array_idx(var_name, 0);
- void *var_data;
+ void *var_data = NULL;
nspc = ext_variables_namespace_create_instance
(this_ext, valdtr, cmd, str_c(name_element->identifier));
diff -r b2ff597c2279 -r 7f9218fe9fac src/lib-sieve/sieve-address.c
--- a/src/lib-sieve/sieve-address.c Mon Apr 30 09:10:44 2012 +0200
+++ b/src/lib-sieve/sieve-address.c Wed May 02 01:17:49 2012 +0200
@@ -348,7 +348,7 @@
return ret;
}
- if ((ret = parse_addr_spec(ctx)) < 0)
+ if (parse_addr_spec(ctx) < 0)
return -1;
if (*ctx->parser.data != '>') {
@@ -367,8 +367,6 @@
(struct sieve_message_address_parser *ctx, const unsigned char *address,
More information about the dovecot-cvs
mailing list