summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2017-12-29 22:38:45 +0200
committerSergey Poznyakoff <gray@gnu.org>2017-12-29 22:38:45 +0200
commit1ede6d005f335bce0849a7f68b2f268264f1017f (patch)
tree09ee10647b50fe2cfdf0b5817894f7e5a33eabaf
parentacf29b5dc9e202c84d7ea199b21ddb23afcf139d (diff)
downloadmailutils-1ede6d005f335bce0849a7f68b2f268264f1017f.tar.gz
mailutils-1ede6d005f335bce0849a7f68b2f268264f1017f.tar.bz2
Fix memory management in imap4d
* imap4d/io.c (imap4d_tokbuf_getline): Add missing index check. * imap4d/search.c (parse_simple_key): Don't free msgset (it will be freed later).
-rw-r--r--imap4d/io.c2
-rw-r--r--imap4d/search.c3
2 files changed, 2 insertions, 3 deletions
diff --git a/imap4d/io.c b/imap4d/io.c
index 9a2047419..fcf4888a6 100644
--- a/imap4d/io.c
+++ b/imap4d/io.c
@@ -653,7 +653,7 @@ imap4d_tokbuf_getline (struct imap4d_tokbuf *tok)
}
while (tok->level && tok->buffer[tok->level - 1] != '\n');
tok->buffer[--tok->level] = 0;
- if (tok->buffer[tok->level - 1] == '\r')
+ if (tok->level > 0 && tok->buffer[tok->level - 1] == '\r')
tok->buffer[--tok->level] = 0;
while (tok->level > 0 && mu_isblank (tok->buffer[tok->level-1]))
tok->buffer[--tok->level] = 0;
diff --git a/imap4d/search.c b/imap4d/search.c
index ed0334354..f9e8a2755 100644
--- a/imap4d/search.c
+++ b/imap4d/search.c
@@ -696,14 +696,13 @@ parse_simple_key (struct parsebuf *pb)
case 'u': /* UID message set */
arg->v.value.v.msgset = parse_msgset_create (pb, NULL,
MU_MSGSET_NUM);
+ arg->v.value.type = value_msgset;
if (mu_msgset_parse_imap (arg->v.value.v.msgset, MU_MSGSET_UID,
pb->token, NULL))
{
- mu_msgset_free (arg->v.value.v.msgset);
pb->err_mesg = "Bogus number set";
return NULL;
}
- arg->v.value.type = value_msgset;
break;
default:

Return to:

Send suggestions and report system problems to the System administrator.