Commit a37a2c4d authored by Kevin J. McCarthy's avatar Kevin J. McCarthy

Fix imap status count range check.

The strtoul() call for parsing the STATUS count wasn't checking the
range properly, because it was assigning to an unsigned int.

Change to assign to a unsigned long, and also add the conversion check
from mutt_atoui().

Thanks to Charles (@chdiza) for quickly noticing the problem!
parent 8fcf8eda
......@@ -933,6 +933,7 @@ static void cmd_parse_status (IMAP_DATA* idata, char* s)
char* value;
BUFFY* inc;
unsigned long ulcount;
unsigned int count;
IMAP_STATUS *status;
unsigned int olduv, oldun;
......@@ -977,12 +978,14 @@ static void cmd_parse_status (IMAP_DATA* idata, char* s)
value = imap_next_word (s);
errno = 0;
count = strtoul (value, &value, 10);
if (errno == ERANGE && count == ULONG_MAX)
ulcount = strtoul (value, &value, 10);
if ((errno == ERANGE && ulcount == ULONG_MAX) ||
((unsigned int) ulcount != ulcount))
dprint (1, (debugfile, "Error parsing STATUS number\n"));
count = (unsigned int) ulcount;
if (!ascii_strncmp ("MESSAGES", s, 8))
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment