[dovecot-cvs] dovecot/src/imap cmd-append.c,1.16,1.17 cmd-fetch.c,1.9,1.10 cmd-search.c,1.9,1.10 cmd-sort.c,1.5,1.6 cmd-status.c,1.6,1.7 cmd-store.c,1.6,1.7 commands-util.c,1.11,1.12

cras at procontrol.fi cras at procontrol.fi
Thu Jan 2 10:09:29 EET 2003


Update of /home/cvs/dovecot/src/imap
In directory danu:/tmp/cvs-serv14058/imap

Modified Files:
	cmd-append.c cmd-fetch.c cmd-search.c cmd-sort.c cmd-status.c 
	cmd-store.c commands-util.c 
Log Message:
Don't access ImapArg's union members directly - too easy to mess up. Fixes a
crash with feeding non-string parameters to SEARCH/SORT commands.



Index: cmd-append.c
===================================================================
RCS file: /home/cvs/dovecot/src/imap/cmd-append.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- cmd-append.c	9 Dec 2002 15:25:20 -0000	1.16
+++ cmd-append.c	2 Jan 2003 08:09:26 -0000	1.17
@@ -44,16 +44,16 @@
 					     internal_date, msg_size, 4);
 
 		if (args[1].type == IMAP_ARG_LIST)
-			*flags = args[1].data.list;
+			*flags = IMAP_ARG_LIST(&args[1]);
 		else if (args[1].type == IMAP_ARG_STRING)
-			*internal_date = args[1].data.str;
+			*internal_date = IMAP_ARG_STR(&args[1]);
 		else
 			return -1;
 		break;
 	case 4:
 		/* we have all parameters */
-		*flags = args[1].data.list;
-		*internal_date = args[2].data.str;
+		*flags = IMAP_ARG_LIST(&args[1]);
+		*internal_date = IMAP_ARG_STR(&args[2]);
 		break;
 	default:
                 i_unreached();
@@ -67,7 +67,7 @@
 	if (args[count-1].type != IMAP_ARG_LITERAL_SIZE)
 		return -1;
 
-	*msg_size = args[count-1].data.literal_size;
+	*msg_size = IMAP_ARG_LITERAL_SIZE(&args[count-1]);
 	return 1;
 }
 

Index: cmd-fetch.c
===================================================================
RCS file: /home/cvs/dovecot/src/imap/cmd-fetch.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- cmd-fetch.c	6 Dec 2002 01:09:22 -0000	1.9
+++ cmd-fetch.c	2 Jan 2003 08:09:26 -0000	1.10
@@ -105,8 +105,7 @@
 		return FALSE;
 	}
 
-	item = arg->data.str;
-	str_ucase(item);
+	item = str_ucase(IMAP_ARG_STR(arg));
 
 	switch (*item) {
 	case 'A':
@@ -215,7 +214,7 @@
 	if (item == NULL) {
 		/* unknown item */
 		client_send_tagline(client, t_strconcat(
-			"BAD Invalid item ", arg->data.str, NULL));
+			"BAD Invalid item ", IMAP_ARG_STR(arg), NULL));
 		return FALSE;
 	}
 
@@ -248,7 +247,7 @@
 		if (!parse_arg(client, &args[1], &data))
 			return TRUE;
 	} else {
-		listargs = args[1].data.list->args;
+		listargs = IMAP_ARG_LIST(&args[1])->args;
 		while (listargs->type != IMAP_ARG_EOL) {
 			if (!parse_arg(client, listargs, &data))
 				return TRUE;

Index: cmd-search.c
===================================================================
RCS file: /home/cvs/dovecot/src/imap/cmd-search.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- cmd-search.c	21 Dec 2002 13:08:49 -0000	1.9
+++ cmd-search.c	2 Jan 2003 08:09:26 -0000	1.10
@@ -26,7 +26,7 @@
 		return TRUE;
 
 	if (args->type == IMAP_ARG_ATOM &&
-	    strcasecmp(args->data.str, "CHARSET") == 0) {
+	    strcasecmp(IMAP_ARG_STR(args), "CHARSET") == 0) {
 		/* CHARSET specified */
 		args++;
 		if (args->type != IMAP_ARG_ATOM &&
@@ -36,7 +36,7 @@
 			return TRUE;
 		}
 
-		charset = args->data.str;
+		charset = IMAP_ARG_STR(args);
 		args++;
 	} else {
 		charset = NULL;

Index: cmd-sort.c
===================================================================
RCS file: /home/cvs/dovecot/src/imap/cmd-sort.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- cmd-sort.c	21 Dec 2002 13:08:49 -0000	1.5
+++ cmd-sort.c	2 Jan 2003 08:09:26 -0000	1.6
@@ -34,7 +34,7 @@
 				    (size_t)-1);
 
 	while (args->type == IMAP_ARG_ATOM || args->type == IMAP_ARG_STRING) {
-		const char *arg = args->data.str;
+		const char *arg = IMAP_ARG_STR(args);
 
 		for (i = 0; sort_names[i].type != MAIL_SORT_END; i++) {
 			if (strcasecmp(arg, sort_names[i].name) == 0)
@@ -91,7 +91,7 @@
 		return TRUE;
 	}
 
-	sorting = get_sort_program(client, args->data.list->args);
+	sorting = get_sort_program(client, IMAP_ARG_LIST(args)->args);
 	if (sorting == NULL)
 		return TRUE;
 	args++;
@@ -101,7 +101,7 @@
 		client_send_command_error(client,
 					  "Invalid charset argument.");
 	}
-	charset = args->data.str;
+	charset = IMAP_ARG_STR(args);
 	args++;
 
 	pool = pool_alloconly_create("MailSortArgs", 2048);

Index: cmd-status.c
===================================================================
RCS file: /home/cvs/dovecot/src/imap/cmd-status.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- cmd-status.c	21 Dec 2002 22:02:58 -0000	1.6
+++ cmd-status.c	2 Jan 2003 08:09:26 -0000	1.7
@@ -19,8 +19,7 @@
 			return -1;
 		}
 
-		str_ucase(args->data.str);
-		item = args->data.str;
+		item = str_ucase(IMAP_ARG_STR(args));
 
 		if (strcmp(item, "MESSAGES") == 0)
 			items |= STATUS_MESSAGES;
@@ -95,7 +94,7 @@
 	}
 
 	/* get the items client wants */
-	items = get_status_items(client, args[1].data.list->args);
+	items = get_status_items(client, IMAP_ARG_LIST(&args[1])->args);
 	if (items == (MailboxStatusItems)-1) {
 		/* error */
 		return TRUE;

Index: cmd-store.c
===================================================================
RCS file: /home/cvs/dovecot/src/imap/cmd-store.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- cmd-store.c	19 Oct 2002 14:51:59 -0000	1.6
+++ cmd-store.c	2 Jan 2003 08:09:26 -0000	1.7
@@ -60,8 +60,9 @@
 		return TRUE;
 
 	if (args[2].type == IMAP_ARG_LIST) {
-		if (!client_parse_mail_flags(client, args[2].data.list->args,
-					     args[2].data.list->size,
+		if (!client_parse_mail_flags(client,
+					     IMAP_ARG_LIST(&args[2])->args,
+					     IMAP_ARG_LIST(&args[2])->size,
 					     &flags, custflags))
 			return TRUE;
 	} else {

Index: commands-util.c
===================================================================
RCS file: /home/cvs/dovecot/src/imap/commands-util.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- commands-util.c	21 Dec 2002 22:02:58 -0000	1.11
+++ commands-util.c	2 Jan 2003 08:09:26 -0000	1.12
@@ -129,7 +129,7 @@
 			return FALSE;
 		}
 
-		atom = args[pos].data.str;
+		atom = IMAP_ARG_STR(&args[pos]);
 		if (*atom == '\\') {
 			/* system flag */
 			str_ucase(atom);




More information about the dovecot-cvs mailing list