From 1b933ed50aef2c31e003a001cef8647244ebfa0e Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Thu, 4 Sep 2008 22:34:09 +0000 Subject: #3773: Check for errors around the use of PyTokenizer_FindEncoding(). reviewed by Brett Cannon. --- Misc/NEWS | 3 +++ Parser/tokenizer.c | 5 ++++- Python/import.c | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Misc/NEWS b/Misc/NEWS index 0e51c80..889cead 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 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(); } -- cgit v0.12