From 32e16c9d5cc16b81708faa81c2b790191c7c487b Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Tue, 19 Mar 2019 17:17:58 +0000 Subject: [PATCH] bpo-36367: Free buffer if realloc fails in tokenize.c (GH-12442) --- Parser/tokenizer.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 1a36f1c3840a73..34722f85b94a55 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -733,9 +733,14 @@ translate_newlines(const char *s, int exec_input, struct tok_state *tok) { } *current = '\0'; final_length = current - buf + 1; - if (final_length < needed_length && final_length) + if (final_length < needed_length && final_length) { /* 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; } @@ -1050,6 +1055,7 @@ tok_nextc(struct tok_state *tok) newbuf = (char *)PyMem_REALLOC(newbuf, newsize); if (newbuf == NULL) { + PyMem_FREE(tok->buf); tok->done = E_NOMEM; tok->cur = tok->inp; return EOF;