[dovecot-cvs] dovecot/src/lib-index/mbox mbox-append.c,1.35,1.36 mbox-from.c,1.8,1.9 mbox-index.c,1.57,1.58 mbox-index.h,1.21,1.22 mbox-rewrite.c,1.48,1.49

cras at procontrol.fi cras at procontrol.fi
Sat Jan 4 19:26:32 EET 2003


Update of /home/cvs/dovecot/src/lib-index/mbox
In directory danu:/tmp/cvs-serv386/lib-index/mbox

Modified Files:
	mbox-append.c mbox-from.c mbox-index.c mbox-index.h 
	mbox-rewrite.c 
Log Message:
Use unsigned char* when accessing non-NUL terminating strings. Compiler
warnings would then notify about accidentally passing them to functions which
require them NUL-terminated. Changed a few functions to use void* to avoid
unneeded casting.



Index: mbox-append.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mbox/mbox-append.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- mbox-append.c	20 Dec 2002 07:53:52 -0000	1.35
+++ mbox-append.c	4 Jan 2003 17:26:30 -0000	1.36
@@ -44,7 +44,7 @@
 	}
 
 	/* parse the From-line */
-	internal_date = mbox_from_parse_date((const char *) data + 5, size - 5);
+	internal_date = mbox_from_parse_date(data + 5, size - 5);
 	if (internal_date == (time_t)-1)
 		internal_date = ioloop_time;
 

Index: mbox-from.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mbox/mbox-from.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- mbox-from.c	21 Dec 2002 22:02:58 -0000	1.8
+++ mbox-from.c	4 Jan 2003 17:26:30 -0000	1.9
@@ -16,9 +16,9 @@
 	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
 };
 
-time_t mbox_from_parse_date(const char *msg, size_t size)
+time_t mbox_from_parse_date(const unsigned char *msg, size_t size)
 {
-	const char *msg_end;
+	const unsigned char *msg_end;
 	struct tm tm;
 	int i;
 
@@ -41,7 +41,7 @@
 
 	/* month */
 	for (i = 0; i < 12; i++) {
-		if (strncasecmp(months[i], msg, 3) == 0) {
+		if (memcasecmp(months[i], msg, 3) == 0) {
 			tm.tm_mon = i;
 			break;
 		}

Index: mbox-index.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mbox/mbox-index.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- mbox-index.c	3 Jan 2003 15:57:12 -0000	1.57
+++ mbox-index.c	4 Jan 2003 17:26:30 -0000	1.58
@@ -139,7 +139,7 @@
 {
 }
 
-static MailFlags mbox_get_status_flags(const char *value, size_t len)
+static MailFlags mbox_get_status_flags(const unsigned char *value, size_t len)
 {
 	MailFlags flags;
 	size_t i;
@@ -168,7 +168,7 @@
 	return flags;
 }
 
-static void mbox_update_custom_flags(const char *value __attr_unused__,
+static void mbox_update_custom_flags(const unsigned char *value __attr_unused__,
 				     size_t len __attr_unused__,
 				     int index, void *context)
 {
@@ -179,7 +179,7 @@
 }
 
 static MailFlags
-mbox_get_keyword_flags(const char *value, size_t len,
+mbox_get_keyword_flags(const unsigned char *value, size_t len,
 		       const char *custom_flags[MAIL_CUSTOM_FLAGS_COUNT])
 {
 	MailFlags flags;
@@ -190,7 +190,7 @@
 	return flags;
 }
 
-static int mbox_parse_imapbase(const char *value, size_t len,
+static int mbox_parse_imapbase(const unsigned char *value, size_t len,
 			       MboxHeaderContext *ctx)
 {
 	const char **flag;
@@ -247,8 +247,8 @@
 }
 
 void mbox_header_func(MessagePart *part __attr_unused__,
-		      const char *name, size_t name_len,
-		      const char *value, size_t value_len,
+		      const unsigned char *name, size_t name_len,
+		      const unsigned char *value, size_t value_len,
 		      void *context)
 {
 	MboxHeaderContext *ctx = context;
@@ -256,12 +256,10 @@
 	size_t i;
 	int fixed = FALSE;
 
-	/* Pretty much copy&pasted from popa3d by Solar Designer */
-	switch (*name) {
-	case '\0':
+	if (name_len == 0) {
 		/* End of headers */
 		if (!ctx->set_read_limit)
-			break;
+			return;
 
 		/* a) use Content-Length, b) search for "From "-line */
 		start_offset = ctx->input->v_offset;
@@ -279,12 +277,15 @@
 
 		i_stream_seek(ctx->input, start_offset);
 		i_stream_set_read_limit(ctx->input, end_offset);
-		break;
+		return;
+	}
 
+	/* Pretty much copy&pasted from popa3d by Solar Designer */
+	switch (*name) {
 	case 'R':
 	case 'r':
 		if (!ctx->received && name_len == 8 &&
-		    strncasecmp(name, "Received", 8) == 0) {
+		    memcasecmp(name, "Received", 8) == 0) {
 			ctx->received = TRUE;
 			fixed = TRUE;
 		}
@@ -293,7 +294,7 @@
 	case 'C':
 	case 'c':
 		if (name_len == 14 && ctx->set_read_limit &&
-		    strncasecmp(name, "Content-Length", 14) == 0) {
+		    memcasecmp(name, "Content-Length", 14) == 0) {
 			/* manual parsing, so we can deal with uoff_t */
 			ctx->content_length = 0;
 			for (i = 0; i < value_len; i++) {
@@ -312,12 +313,12 @@
 	case 'D':
 	case 'd':
 		if (name_len == 12)
-			fixed = strncasecmp(name, "Delivered-To", 12) == 0;
+			fixed = memcasecmp(name, "Delivered-To", 12) == 0;
 		else if (name_len == 4) {
 			/* Received-header contains date too,
 			   and more trusted one */
 			fixed = !ctx->received &&
-				strncasecmp(name, "Date", 4) == 0;
+				memcasecmp(name, "Date", 4) == 0;
 		}
 		break;
 
@@ -327,13 +328,13 @@
 			/* Received-header contains unique ID too,
 			   and more trusted one */
 			fixed = !ctx->received &&
-				strncasecmp(name, "Message-ID", 10) == 0;
+				memcasecmp(name, "Message-ID", 10) == 0;
 		}
 		break;
 
 	case 'S':
 	case 's':
-		if (name_len == 6 && strncasecmp(name, "Status", 6) == 0) {
+		if (name_len == 6 && memcasecmp(name, "Status", 6) == 0) {
 			/* update message flags */
 			ctx->flags |= mbox_get_status_flags(value, value_len);
 		}
@@ -345,18 +346,18 @@
 			/* Let the local delivery agent help generate unique
 			   ID's but don't blindly trust this header alone as
 			   it could just as easily come from the remote. */
-			fixed = strncasecmp(name, "X-Delivery-ID:", 13) == 0;
+			fixed = memcasecmp(name, "X-Delivery-ID:", 13) == 0;
 		} else if (name_len == 8 &&
-			 strncasecmp(name, "X-Status", 8) == 0) {
+			   memcasecmp(name, "X-Status", 8) == 0) {
 			/* update message flags */
 			ctx->flags |= mbox_get_status_flags(value, value_len);
 		} else if (name_len == 10 &&
-			   strncasecmp(name, "X-Keywords", 10) == 0) {
+			   memcasecmp(name, "X-Keywords", 10) == 0) {
 			/* update custom message flags */
 			ctx->flags |= mbox_get_keyword_flags(value, value_len,
 							     ctx->custom_flags);
 		} else if (name_len == 10 &&
-			   strncasecmp(name, "X-IMAPbase", 10) == 0) {
+			   memcasecmp(name, "X-IMAPbase", 10) == 0) {
 			/* update list of custom message flags */
 			(void)mbox_parse_imapbase(value, value_len, ctx);
 		}
@@ -367,9 +368,10 @@
 		md5_update(&ctx->md5, value, value_len);
 }
 
-void mbox_keywords_parse(const char *value, size_t len,
+void mbox_keywords_parse(const unsigned char *value, size_t len,
 			 const char *custom_flags[MAIL_CUSTOM_FLAGS_COUNT],
-			 void (*func)(const char *, size_t, int, void *),
+			 void (*func)(const unsigned char *, size_t,
+				      int, void *),
 			 void *context)
 {
 	size_t custom_len[MAIL_CUSTOM_FLAGS_COUNT];
@@ -409,7 +411,7 @@
 		/* check if it's found */
 		for (i = 0; i < MAIL_CUSTOM_FLAGS_COUNT; i++) {
 			if (custom_len[i] == item_len &&
-			    strncasecmp(custom_flags[i], value, item_len) == 0)
+			    memcasecmp(custom_flags[i], value, item_len) == 0)
 				break;
 		}
 
@@ -484,8 +486,8 @@
 			if (msg[i] == '\n') {
 				msg += startpos;
 				i -= startpos;
-				return mbox_from_parse_date((const char *) msg,
-							    size) != (time_t)-1;
+				return mbox_from_parse_date(msg, size) !=
+					(time_t)-1;
 			}
 		}
 	}

Index: mbox-index.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mbox/mbox-index.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- mbox-index.h	6 Dec 2002 01:09:23 -0000	1.21
+++ mbox-index.h	4 Jan 2003 17:26:30 -0000	1.22
@@ -31,12 +31,13 @@
 			      IStream *input);
 void mbox_header_free_context(MboxHeaderContext *ctx);
 void mbox_header_func(MessagePart *part __attr_unused__,
-		      const char *name, size_t name_len,
-		      const char *value, size_t value_len,
+		      const unsigned char *name, size_t name_len,
+		      const unsigned char *value, size_t value_len,
 		      void *context);
-void mbox_keywords_parse(const char *value, size_t len,
+void mbox_keywords_parse(const unsigned char *value, size_t len,
 			 const char *custom_flags[MAIL_CUSTOM_FLAGS_COUNT],
-			 void (*func)(const char *, size_t, int, void *),
+			 void (*func)(const unsigned char *, size_t,
+				      int, void *),
 			 void *context);
 int mbox_skip_crlf(IStream *input);
 void mbox_skip_empty_lines(IStream *input);
@@ -55,7 +56,7 @@
 
 int mbox_index_append(MailIndex *index, IStream *input);
 
-time_t mbox_from_parse_date(const char *msg, size_t size);
+time_t mbox_from_parse_date(const unsigned char *msg, size_t size);
 const char *mbox_from_create(const char *sender, time_t time);
 
 int mbox_index_rewrite(MailIndex *index);

Index: mbox-rewrite.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mbox/mbox-rewrite.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -d -r1.48 -r1.49
--- mbox-rewrite.c	21 Dec 2002 22:02:58 -0000	1.48
+++ mbox-rewrite.c	4 Jan 2003 17:26:30 -0000	1.49
@@ -196,7 +196,7 @@
 	return TRUE;
 }
 
-static const char *strip_chars(const char *value, size_t value_len,
+static const char *strip_chars(const unsigned char *value, size_t value_len,
 			       const char *list)
 {
 	/* @UNSAFE: leave only unknown flags, very likely none */
@@ -216,7 +216,7 @@
 	return ret;
 }
 
-static void update_stripped_custom_flags(const char *value, size_t len,
+static void update_stripped_custom_flags(const unsigned char *value, size_t len,
 					 int index, void *context)
 {
 	String *str = context;
@@ -229,7 +229,7 @@
 	}
 }
 
-static const char *strip_custom_flags(const char *value, size_t len,
+static const char *strip_custom_flags(const unsigned char *value, size_t len,
 				      MboxRewriteContext *ctx)
 {
 	String *str;
@@ -241,8 +241,8 @@
 }
 
 static void header_func(MessagePart *part __attr_unused__,
-			const char *name, size_t name_len,
-			const char *value, size_t value_len,
+			const unsigned char *name, size_t name_len,
+			const unsigned char *value, size_t value_len,
 			void *context)
 {
 	MboxRewriteContext *ctx = context;
@@ -252,25 +252,27 @@
 	if (ctx->failed)
 		return;
 
-	if (name_len == 6 && strncasecmp(name, "Status", 6) == 0) {
+	if (name_len == 6 && memcasecmp(name, "Status", 6) == 0) {
 		ctx->status_found = TRUE;
 		str = strip_chars(value, value_len, "RO");
 		(void)mbox_write_status(ctx, str);
-	} else if (name_len == 8 && strncasecmp(name, "X-Status", 8) == 0) {
+	} else if (name_len == 8 && memcasecmp(name, "X-Status", 8) == 0) {
 		ctx->xstatus_found = TRUE;
 		str = strip_chars(value, value_len, "ADFT");
 		(void)mbox_write_xstatus(ctx, str);
-	} else if (name_len == 10 && strncasecmp(name, "X-Keywords", 10) == 0) {
+	} else if (name_len == 10 && memcasecmp(name, "X-Keywords", 10) == 0) {
 		ctx->ximapbase_found = TRUE;
 		str = strip_custom_flags(value, value_len, ctx);
 		(void)mbox_write_xkeywords(ctx, str);
-	} else if (name_len == 10 && strncasecmp(name, "X-IMAPbase", 10) == 0) {
+	} else if (name_len == 10 && memcasecmp(name, "X-IMAPbase", 10) == 0) {
 		if (ctx->seq == 1) {
 			/* temporarily copy the value to make sure we
 			   don't overflow it */
+			const char *str;
+
 			t_push();
-			value = t_strndup(value, value_len);
-			ctx->uid_validity = strtoul(value, &end, 10);
+			str = t_strndup(value, value_len);
+			ctx->uid_validity = strtoul(str, &end, 10);
 			while (*end == ' ') end++;
 			ctx->uid_last = strtoul(end, &end, 10);
 			t_pop();
@@ -279,7 +281,7 @@
 			(void)mbox_write_ximapbase(ctx);
 		}
 	} else if (name_len == 14 &&
-		   strncasecmp(name, "Content-Length", 14) == 0) {
+		   memcasecmp(name, "Content-Length", 14) == 0) {
 		ctx->content_length_found = TRUE;
 		(void)mbox_write_content_length(ctx);
 	} else if (name_len > 0) {




More information about the dovecot-cvs mailing list