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