mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #11619: _PyImport_LoadDynamicModule() doesn't encode the path to bytes
on Windows.
This commit is contained in:
parent
54e7135fe8
commit
2d3222740b
3 changed files with 30 additions and 17 deletions
|
@ -12,8 +12,13 @@
|
|||
|
||||
#include "importdl.h"
|
||||
|
||||
#ifdef MS_WINDOWS
|
||||
extern dl_funcptr _PyImport_GetDynLoadWindows(const char *shortname,
|
||||
PyObject *pathname, FILE *fp);
|
||||
#else
|
||||
extern dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname,
|
||||
const char *pathname, FILE *fp);
|
||||
#endif
|
||||
|
||||
/* name should be ASCII only because the C language doesn't accept non-ASCII
|
||||
identifiers, and dynamic modules are written in C. */
|
||||
|
@ -22,7 +27,9 @@ PyObject *
|
|||
_PyImport_LoadDynamicModule(PyObject *name, PyObject *path, FILE *fp)
|
||||
{
|
||||
PyObject *m;
|
||||
#ifndef MS_WINDOWS
|
||||
PyObject *pathbytes;
|
||||
#endif
|
||||
char *namestr, *lastdot, *shortname, *packagecontext, *oldcontext;
|
||||
dl_funcptr p0;
|
||||
PyObject* (*p)(void);
|
||||
|
@ -48,12 +55,16 @@ _PyImport_LoadDynamicModule(PyObject *name, PyObject *path, FILE *fp)
|
|||
shortname = lastdot+1;
|
||||
}
|
||||
|
||||
#ifdef MS_WINDOWS
|
||||
p0 = _PyImport_GetDynLoadWindows(shortname, path, fp);
|
||||
#else
|
||||
pathbytes = PyUnicode_EncodeFSDefault(path);
|
||||
if (pathbytes == NULL)
|
||||
return NULL;
|
||||
p0 = _PyImport_GetDynLoadFunc(shortname,
|
||||
PyBytes_AS_STRING(pathbytes), fp);
|
||||
Py_DECREF(pathbytes);
|
||||
#endif
|
||||
p = (PyObject*(*)(void))p0;
|
||||
if (PyErr_Occurred())
|
||||
return NULL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue