diff options
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Parser/tokenizer.c | 5 | ||||
-rw-r--r-- | Python/import.c | 2 |
3 files changed, 9 insertions, 1 deletions
@@ -12,6 +12,9 @@ What's New in Python 3.0 release candidate 1 Core and Builtins ----------------- +- Issue 3774: Added a few more checks in PyTokenizer_FindEncoding to handle + error conditions. + - Issue 3594: Fix Parser/tokenizer.c:fp_setreadl() to open the file being tokenized by either a file path or file pointer for the benefit of PyTokenizer_FindEncoding(). diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index e4cf8e4..a040696 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1610,7 +1610,10 @@ PyTokenizer_FindEncoding(int fd) fclose(fp); if (tok->encoding) { encoding = (char *)PyMem_MALLOC(strlen(tok->encoding) + 1); - strcpy(encoding, tok->encoding); + if (encoding) + strcpy(encoding, tok->encoding); + else + PyErr_NoMemory(); } PyTokenizer_Free(tok); return encoding; diff --git a/Python/import.c b/Python/import.c index d87d751..9c077fe 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2830,6 +2830,8 @@ call_find_module(char *name, PyObject *path) memory. */ found_encoding = PyTokenizer_FindEncoding(fd); lseek(fd, 0, 0); /* Reset position */ + if (found_encoding == NULL && PyErr_Occurred()) + return NULL; encoding = (found_encoding != NULL) ? found_encoding : (char*)PyUnicode_GetDefaultEncoding(); } |