diff --git a/Misc/NEWS b/Misc/NEWS index 0e51c80c8bb..889cead8a69 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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 e4cf8e4cc55..a0406965790 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 d87d7515a0d..9c077fe8a66 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(); }