bpo-36367: Free buffer if realloc fails in tokenize.c (GH-12442)

This commit is contained in:
Pablo Galindo 2019-03-19 17:17:58 +00:00 committed by GitHub
parent dcf617152e
commit cb90c89de1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -649,9 +649,14 @@ translate_newlines(const char *s, int exec_input, struct tok_state *tok) {
} }
*current = '\0'; *current = '\0';
final_length = current - buf + 1; final_length = current - buf + 1;
if (final_length < needed_length && final_length) if (final_length < needed_length && final_length) {
/* should never fail */ /* should never fail */
buf = PyMem_REALLOC(buf, final_length); char* result = PyMem_REALLOC(buf, final_length);
if (result == NULL) {
PyMem_FREE(buf);
}
buf = result;
}
return buf; return buf;
} }
@ -958,6 +963,7 @@ tok_nextc(struct tok_state *tok)
newbuf = (char *)PyMem_REALLOC(newbuf, newbuf = (char *)PyMem_REALLOC(newbuf,
newsize); newsize);
if (newbuf == NULL) { if (newbuf == NULL) {
PyMem_FREE(tok->buf);
tok->done = E_NOMEM; tok->done = E_NOMEM;
tok->cur = tok->inp; tok->cur = tok->inp;
return EOF; return EOF;