[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