diff options
author | sobolevn <mail@sobolevn.me> | 2024-09-11 13:37:35 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-11 13:37:35 (GMT) |
commit | c8d1dbef5b770b647aa7ff45fd5b269bc7629d0b (patch) | |
tree | 101f4575992fca297df302b95cfdd62b57090890 | |
parent | e9eedf19c99475b1940bbbbdc8816b51da3968e7 (diff) | |
download | cpython-c8d1dbef5b770b647aa7ff45fd5b269bc7629d0b.zip cpython-c8d1dbef5b770b647aa7ff45fd5b269bc7629d0b.tar.gz cpython-c8d1dbef5b770b647aa7ff45fd5b269bc7629d0b.tar.bz2 |
gh-123919: Fix null handling in `_freeze_module.c` (#123920)
-rw-r--r-- | Programs/_freeze_module.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/Programs/_freeze_module.c b/Programs/_freeze_module.c index 2a462a4..891e425 100644 --- a/Programs/_freeze_module.c +++ b/Programs/_freeze_module.c @@ -110,6 +110,9 @@ static PyObject * compile_and_marshal(const char *name, const char *text) { char *filename = (char *) malloc(strlen(name) + 10); + if (filename == NULL) { + return PyErr_NoMemory(); + } sprintf(filename, "<frozen %s>", name); PyObject *code = Py_CompileStringExFlags(text, filename, Py_file_input, NULL, 0); @@ -133,6 +136,9 @@ get_varname(const char *name, const char *prefix) { size_t n = strlen(prefix); char *varname = (char *) malloc(strlen(name) + n + 1); + if (varname == NULL) { + return NULL; + } (void)strcpy(varname, prefix); for (size_t i = 0; name[i] != '\0'; i++) { if (name[i] == '.') { @@ -178,6 +184,11 @@ write_frozen(const char *outpath, const char *inpath, const char *name, fprintf(outfile, "%s\n", header); char *arrayname = get_varname(name, "_Py_M__"); + if (arrayname == NULL) { + fprintf(stderr, "memory error: could not allocate varname\n"); + fclose(outfile); + return -1; + } write_code(outfile, marshalled, arrayname); free(arrayname); |