summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Wouters <thomas@python.org>2001-07-11 12:03:44 (GMT)
committerThomas Wouters <thomas@python.org>2001-07-11 12:03:44 (GMT)
commitd4a75dc44c39c232f10dcfd549bad1de5e5fdd7b (patch)
tree2949b131f1210bc354276508233fe30c34fa92a2
parente27a8b97669f34a3bf50af8812fd12b346ecd17b (diff)
downloadcpython-d4a75dc44c39c232f10dcfd549bad1de5e5fdd7b.zip
cpython-d4a75dc44c39c232f10dcfd549bad1de5e5fdd7b.tar.gz
cpython-d4a75dc44c39c232f10dcfd549bad1de5e5fdd7b.tar.bz2
Backport of Tim's checkin 2.178:
SF bug #438295: [Windows] __init__.py cause strange behavior Probable fix (the bug report doesn't have enough info to say for sure). find_init_module(): Insist on a case-sensitive match for __init__ files. Given __INIT__.PY instead, find_init_module() thought that was fine, but the later attempt to do find_module("__INIT__.PY") didn't and its caller silently suppressed the resulting ImportError. Now find_init_module() refuses to accept __INIT__.PY to begin with.
-rw-r--r--Python/import.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/Python/import.c b/Python/import.c
index 15bcca0..3d55fe4 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -1194,26 +1194,43 @@ case_ok(char *buf, int len, int namelen, char *name)
static int
find_init_module(char *buf)
{
- size_t save_len = strlen(buf);
+ const size_t save_len = strlen(buf);
size_t i = save_len;
+ char *pname; /* pointer to start of __init__ */
struct stat statbuf;
+/* For calling case_ok(buf, len, namelen, name):
+ * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
+ * ^ ^ ^ ^
+ * |--------------------- buf ---------------------|
+ * |------------------- len ------------------|
+ * |------ name -------|
+ * |----- namelen -----|
+ */
if (save_len + 13 >= MAXPATHLEN)
return 0;
buf[i++] = SEP;
- strcpy(buf+i, "__init__.py");
+ pname = buf + i;
+ strcpy(pname, "__init__.py");
if (stat(buf, &statbuf) == 0) {
- buf[save_len] = '\0';
- return 1;
+ if (case_ok(buf,
+ save_len + 9, /* len("/__init__") */
+ 8, /* len("__init__") */
+ pname)) {
+ buf[save_len] = '\0';
+ return 1;
+ }
}
- i += strlen(buf+i);
- if (Py_OptimizeFlag)
- strcpy(buf+i, "o");
- else
- strcpy(buf+i, "c");
+ i += strlen(pname);
+ strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
if (stat(buf, &statbuf) == 0) {
- buf[save_len] = '\0';
- return 1;
+ if (case_ok(buf,
+ save_len + 9, /* len("/__init__") */
+ 8, /* len("__init__") */
+ pname)) {
+ buf[save_len] = '\0';
+ return 1;
+ }
}
buf[save_len] = '\0';
return 0;