Mercurial > cpython-lru_cache-weakref
diff Python/import.c @ 18470:498d7dd99da4 2.1
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.
| author | Thomas Wouters <thomas@python.org> |
|---|---|
| date | Wed, 11 Jul 2001 12:03:44 +0000 |
| parents | 0711f3cd44d0 |
| children | aed39caf9860 |
line wrap: on
line diff
--- a/Python/import.c Wed Jul 11 11:38:20 2001 +0000 +++ b/Python/import.c Wed Jul 11 12:03:44 2001 +0000 @@ -1194,26 +1194,43 @@ 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;
