diff options
| author | shadchin <[email protected]> | 2024-06-13 19:29:50 +0300 |
|---|---|---|
| committer | shadchin <[email protected]> | 2024-06-13 19:51:47 +0300 |
| commit | 9051e2318afc1bfbd88a103f7392e622aa8c9527 (patch) | |
| tree | 5c63ea23ebd5e7b7b9864903a9312aa853193ca5 /contrib/tools/python/src/Parser | |
| parent | 224da250178b9250c7577a167d44f94f732d3627 (diff) | |
Update Python from 2.7.16 to 2.7.18
2a151e9cf2ebdfa59d250c1bbb800e908703a6f0
Diffstat (limited to 'contrib/tools/python/src/Parser')
| -rw-r--r-- | contrib/tools/python/src/Parser/myreadline.c | 22 | ||||
| -rw-r--r-- | contrib/tools/python/src/Parser/tokenizer.c | 9 |
2 files changed, 24 insertions, 7 deletions
diff --git a/contrib/tools/python/src/Parser/myreadline.c b/contrib/tools/python/src/Parser/myreadline.c index 59db41ab169..537621402b8 100644 --- a/contrib/tools/python/src/Parser/myreadline.c +++ b/contrib/tools/python/src/Parser/myreadline.c @@ -108,7 +108,7 @@ char * PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, char *prompt) { size_t n; - char *p; + char *p, *pr; n = 100; if ((p = (char *)PyMem_MALLOC(n)) == NULL) return NULL; @@ -140,17 +140,29 @@ PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, char *prompt) n = strlen(p); while (n > 0 && p[n-1] != '\n') { size_t incr = n+2; - p = (char *)PyMem_REALLOC(p, n + incr); - if (p == NULL) - return NULL; if (incr > INT_MAX) { + PyMem_FREE(p); PyErr_SetString(PyExc_OverflowError, "input line too long"); + return NULL; + } + pr = (char *)PyMem_REALLOC(p, n + incr); + if (pr == NULL) { + PyMem_FREE(p); + PyErr_NoMemory(); + return NULL; } + p = pr; if (my_fgets(p+n, (int)incr, sys_stdin) != 0) break; n += strlen(p+n); } - return (char *)PyMem_REALLOC(p, n+1); + pr = (char *)PyMem_REALLOC(p, n+1); + if (pr == NULL) { + PyMem_FREE(p); + PyErr_NoMemory(); + return NULL; + } + return pr; } diff --git a/contrib/tools/python/src/Parser/tokenizer.c b/contrib/tools/python/src/Parser/tokenizer.c index c6e61df533e..89666611940 100644 --- a/contrib/tools/python/src/Parser/tokenizer.c +++ b/contrib/tools/python/src/Parser/tokenizer.c @@ -656,9 +656,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; } |
