mirror of
https://github.com/python/cpython.git
synced 2025-08-24 02:35:59 +00:00
Issue #9630: Redecode filenames when setting the filesystem encoding
Redecode the filenames of: - all modules: __file__ and __path__ attributes - all code objects: co_filename attribute - sys.path - sys.meta_path - sys.executable - sys.path_importer_cache (keys) Keep weak references to all code objects until initfsencoding() is called, to be able to redecode co_filename attribute of all code objects.
This commit is contained in:
parent
a5785b1524
commit
c39211f51e
5 changed files with 293 additions and 1 deletions
|
@ -5,6 +5,8 @@
|
|||
#define NAME_CHARS \
|
||||
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"
|
||||
|
||||
PyObject *_Py_code_object_list = NULL;
|
||||
|
||||
/* all_name_chars(s): true iff all chars in s are valid NAME_CHARS */
|
||||
|
||||
static int
|
||||
|
@ -109,8 +111,23 @@ PyCode_New(int argcount, int kwonlyargcount,
|
|||
co->co_lnotab = lnotab;
|
||||
co->co_zombieframe = NULL;
|
||||
co->co_weakreflist = NULL;
|
||||
|
||||
if (_Py_code_object_list != NULL) {
|
||||
int err;
|
||||
PyObject *ref = PyWeakref_NewRef((PyObject*)co, NULL);
|
||||
if (ref == NULL)
|
||||
goto error;
|
||||
err = PyList_Append(_Py_code_object_list, ref);
|
||||
Py_DECREF(ref);
|
||||
if (err)
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
return co;
|
||||
|
||||
error:
|
||||
Py_DECREF(co);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PyCodeObject *
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue