imap: remove the only sscanf() call in the IMAP code

Avoids the use of a stack buffer.

Closes #11673
This commit is contained in:
Daniel Stenberg 2023-08-14 13:38:09 +02:00
parent de5f66595e
commit 91765104c2
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -1091,10 +1091,19 @@ static CURLcode imap_state_select_resp(struct Curl_easy *data, int imapcode,
if(imapcode == '*') {
/* See if this is an UIDVALIDITY response */
char tmp[20];
if(sscanf(line + 2, "OK [UIDVALIDITY %19[0123456789]]", tmp) == 1) {
Curl_safefree(imapc->mailbox_uidvalidity);
imapc->mailbox_uidvalidity = strdup(tmp);
if(checkprefix("OK [UIDVALIDITY ", line + 2)) {
size_t len = 0;
const char *p = &line[2] + strlen("OK [UIDVALIDITY ");
while((len < 20) && p[len] && ISDIGIT(p[len]))
len++;
if(len && (p[len] == ']')) {
struct dynbuf uid;
Curl_dyn_init(&uid, 20);
if(Curl_dyn_addn(&uid, p, len))
return CURLE_OUT_OF_MEMORY;
Curl_safefree(imapc->mailbox_uidvalidity);
imapc->mailbox_uidvalidity = Curl_dyn_ptr(&uid);
}
}
}
else if(imapcode == IMAP_RESP_OK) {