summaryrefslogtreecommitdiffstats
path: root/Python/import.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/import.c')
-rw-r--r--Python/import.c57
1 files changed, 41 insertions, 16 deletions
diff --git a/Python/import.c b/Python/import.c
index 9c70ed8..2be3308 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -3040,15 +3040,20 @@ imp_load_compiled(PyObject *self, PyObject *args)
PyObject *fob = NULL;
PyObject *m;
FILE *fp;
- if (!PyArg_ParseTuple(args, "ss|O:load_compiled",
- &name, &pathname, &fob))
+ if (!PyArg_ParseTuple(args, "ses|O:load_compiled",
+ &name,
+ Py_FileSystemDefaultEncoding, &pathname,
+ &fob))
return NULL;
fp = get_file(pathname, fob, "rb");
- if (fp == NULL)
+ if (fp == NULL) {
+ PyMem_Free(pathname);
return NULL;
+ }
m = load_compiled_module(name, pathname, fp);
if (fob == NULL)
fclose(fp);
+ PyMem_Free(pathname);
return m;
}
@@ -3062,15 +3067,20 @@ imp_load_dynamic(PyObject *self, PyObject *args)
PyObject *fob = NULL;
PyObject *m;
FILE *fp = NULL;
- if (!PyArg_ParseTuple(args, "ss|O:load_dynamic",
- &name, &pathname, &fob))
+ if (!PyArg_ParseTuple(args, "ses|O:load_dynamic",
+ &name,
+ Py_FileSystemDefaultEncoding, &pathname,
+ &fob))
return NULL;
if (fob) {
fp = get_file(pathname, fob, "r");
- if (fp == NULL)
+ if (fp == NULL) {
+ PyMem_Free(pathname);
return NULL;
+ }
}
m = _PyImport_LoadDynamicModule(name, pathname, fp);
+ PyMem_Free(pathname);
return m;
}
@@ -3084,12 +3094,16 @@ imp_load_source(PyObject *self, PyObject *args)
PyObject *fob = NULL;
PyObject *m;
FILE *fp;
- if (!PyArg_ParseTuple(args, "ss|O:load_source",
- &name, &pathname, &fob))
+ if (!PyArg_ParseTuple(args, "ses|O:load_source",
+ &name,
+ Py_FileSystemDefaultEncoding, &pathname,
+ &fob))
return NULL;
fp = get_file(pathname, fob, "r");
- if (fp == NULL)
+ if (fp == NULL) {
+ PyMem_Free(pathname);
return NULL;
+ }
m = load_source_module(name, pathname, fp);
if (fob == NULL)
fclose(fp);
@@ -3102,13 +3116,15 @@ imp_load_module(PyObject *self, PyObject *args)
char *name;
PyObject *fob;
char *pathname;
+ PyObject * ret;
char *suffix; /* Unused */
char *mode;
int type;
FILE *fp;
- if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
- &name, &fob, &pathname,
+ if (!PyArg_ParseTuple(args, "sOes(ssi):load_module",
+ &name, &fob,
+ Py_FileSystemDefaultEncoding, &pathname,
&suffix, &mode, &type))
return NULL;
if (*mode) {
@@ -3119,6 +3135,7 @@ imp_load_module(PyObject *self, PyObject *args)
if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
PyErr_Format(PyExc_ValueError,
"invalid file open mode %.200s", mode);
+ PyMem_Free(pathname);
return NULL;
}
}
@@ -3126,10 +3143,14 @@ imp_load_module(PyObject *self, PyObject *args)
fp = NULL;
else {
fp = get_file(NULL, fob, mode);
- if (fp == NULL)
+ if (fp == NULL) {
+ PyMem_Free(pathname);
return NULL;
- }
- return load_module(name, fp, pathname, type, NULL);
+ }
+ }
+ ret = load_module(name, fp, pathname, type, NULL);
+ PyMem_Free(pathname);
+ return ret;
}
static PyObject *
@@ -3137,9 +3158,13 @@ imp_load_package(PyObject *self, PyObject *args)
{
char *name;
char *pathname;
- if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
+ PyObject * ret;
+ if (!PyArg_ParseTuple(args, "ses:load_package",
+ &name, Py_FileSystemDefaultEncoding, &pathname))
return NULL;
- return load_package(name, pathname);
+ ret = load_package(name, pathname);
+ PyMem_Free(pathname);
+ return ret;
}
static PyObject *