summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python/src/Parser
diff options
context:
space:
mode:
authorshadchin <[email protected]>2024-06-13 19:29:50 +0300
committershadchin <[email protected]>2024-06-13 19:51:47 +0300
commit9051e2318afc1bfbd88a103f7392e622aa8c9527 (patch)
tree5c63ea23ebd5e7b7b9864903a9312aa853193ca5 /contrib/tools/python/src/Parser
parent224da250178b9250c7577a167d44f94f732d3627 (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.c22
-rw-r--r--contrib/tools/python/src/Parser/tokenizer.c9
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;
}