summaryrefslogtreecommitdiffstats
path: root/Parser/tokenizer.c
diff options
context:
space:
mode:
authorPablo Galindo <Pablogsal@gmail.com>2019-03-19 17:17:58 (GMT)
committerGitHub <noreply@github.com>2019-03-19 17:17:58 (GMT)
commitcb90c89de14aab636739b3e810cf949e47b54a0c (patch)
tree7cd028cd325ae0e3f08ed5e598fe5109efd3a340 /Parser/tokenizer.c
parentdcf617152e1d4c4a5e7965733928858a9c0936ca (diff)
downloadcpython-cb90c89de14aab636739b3e810cf949e47b54a0c.zip
cpython-cb90c89de14aab636739b3e810cf949e47b54a0c.tar.gz
cpython-cb90c89de14aab636739b3e810cf949e47b54a0c.tar.bz2
bpo-36367: Free buffer if realloc fails in tokenize.c (GH-12442)
Diffstat (limited to 'Parser/tokenizer.c')
-rw-r--r--Parser/tokenizer.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index 8f0a9c8..ad05497 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -649,9 +649,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;
}
@@ -958,6 +963,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;