diff options
Diffstat (limited to 'libmailutils/imapio/getline.c')
-rw-r--r-- | libmailutils/imapio/getline.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/libmailutils/imapio/getline.c b/libmailutils/imapio/getline.c index d0e5105e5..d5769bb98 100644 --- a/libmailutils/imapio/getline.c +++ b/libmailutils/imapio/getline.c @@ -1,5 +1,5 @@ /* GNU Mailutils -- a suite of utilities for electronic mail - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2024 Free Software Foundation, Inc. GNU Mailutils is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -216,7 +216,7 @@ mu_imapio_getline (struct _mu_imapio *io) xlev = mu_imapio_set_xscript_level (io, MU_XSCRIPT_PAYLOAD); number = strtoul (last_arg + 1, &sp, 10); - /* Client can ask for non-synchronised literal, + /* Client can ask for non-synchronized literal, if a '+' is appended to the octet count. */ if (*sp == '}') { @@ -256,14 +256,16 @@ mu_imapio_getline (struct _mu_imapio *io) io->_imap_buf_base[io->_imap_buf_level++] = 0; free (last_arg); - io->_imap_ws.ws_wordv[--io->_imap_ws.ws_wordc] = NULL; - if (mu_wordsplit_len (io->_imap_buf_base, io->_imap_buf_level, - &io->_imap_ws, - io->_imap_ws_flags|MU_WRDSF_NOSPLIT)) + last_arg = malloc (io->_imap_buf_level + 1); + if (!last_arg) { - rc = MU_ERR_PARSE; + rc = errno; + io->_imap_ws.ws_wordv[--io->_imap_ws.ws_wordc] = NULL; break; } + last_arg[io->_imap_buf_level] = 0; + memcpy (last_arg, io->_imap_buf_base, io->_imap_buf_level); + io->_imap_ws.ws_wordv[io->_imap_ws.ws_wordc-1] = last_arg; } else break; |