diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2017-12-29 22:38:45 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2017-12-29 22:38:45 +0200 |
commit | 1ede6d005f335bce0849a7f68b2f268264f1017f (patch) | |
tree | 09ee10647b50fe2cfdf0b5817894f7e5a33eabaf | |
parent | acf29b5dc9e202c84d7ea199b21ddb23afcf139d (diff) | |
download | mailutils-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.c | 2 | ||||
-rw-r--r-- | imap4d/search.c | 3 |
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: |