diff options
Diffstat (limited to 'Python')
| -rw-r--r-- | Python/dynload_aix.c | 14 | ||||
| -rw-r--r-- | Python/dynload_hpux.c | 15 | ||||
| -rw-r--r-- | Python/dynload_shlib.c | 4 | 
3 files changed, 25 insertions, 8 deletions
| diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c index 684f10a8b9..97f7698ef4 100644 --- a/Python/dynload_aix.c +++ b/Python/dynload_aix.c @@ -144,10 +144,16 @@ aix_loaderror(const char *pathname)          ERRBUF_APPEND(message[i]);          ERRBUF_APPEND("\n");      } -    errbuf[strlen(errbuf)-1] = '\0';            /* trim off last newline */ -    pathname_ob = PyUnicode_FromString(pathname); -    errbuf_ob = PyUnicode_FromString(errbuf); -    PyErr_SetImportError(errbuf_ob, NULL, pathname); +    /* Subtract 1 from the length to trim off trailing newline */ +    errbuf_ob = PyUnicode_DecodeLocaleAndSize(errbuf, strlen(errbuf)-1, "surrogateescape"); +    if (errbuf_ob == NULL) +        return; +    pathname_ob = PyUnicode_DecodeFSDefault(pathname); +    if (pathname_ob == NULL) { +        Py_DECREF(errbuf_ob); +        return; +    } +    PyErr_SetImportError(errbuf_ob, NULL, pathname_ob);      Py_DECREF(pathname_ob);      Py_DECREF(errbuf_ob);      return; diff --git a/Python/dynload_hpux.c b/Python/dynload_hpux.c index 4b964a69d3..e36d608c6d 100644 --- a/Python/dynload_hpux.c +++ b/Python/dynload_hpux.c @@ -36,9 +36,20 @@ dl_funcptr _PyImport_FindSharedFuncptr(const char *prefix,          char buf[256];          PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s",                        pathname); -        PyObject *buf_ob = PyUnicode_FromString(buf); +        PyObject *buf_ob = PyUnicode_DecodeFSDefault(buf); +        if (buf_ob == NULL) +            return NULL;          PyObject *shortname_ob = PyUnicode_FromString(shortname); -        PyObject *pathname_ob = PyUnicode_FromString(pathname); +        if (shortname_ob == NULL) { +            Py_DECREF(buf_ob); +            return NULL; +        } +        PyObject *pathname_ob = PyUnicode_DecodeFSDefault(pathname); +        if (pathname_ob == NULL) { +            Py_DECREF(buf_ob); +            Py_DECREF(shortname_ob); +            return NULL; +        }          PyErr_SetImportError(buf_ob, shortname_ob, pathname_ob);          Py_DECREF(buf_ob);          Py_DECREF(shortname_ob); diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c index 082154dd91..23828898d3 100644 --- a/Python/dynload_shlib.c +++ b/Python/dynload_shlib.c @@ -106,7 +106,7 @@ _PyImport_FindSharedFuncptr(const char *prefix,          const char *error = dlerror();          if (error == NULL)              error = "unknown dlopen() error"; -        error_ob = PyUnicode_FromString(error); +        error_ob = PyUnicode_DecodeLocale(error, "surrogateescape");          if (error_ob == NULL)              return NULL;          mod_name = PyUnicode_FromString(shortname); @@ -114,7 +114,7 @@ _PyImport_FindSharedFuncptr(const char *prefix,              Py_DECREF(error_ob);              return NULL;          } -        path = PyUnicode_FromString(pathname); +        path = PyUnicode_DecodeFSDefault(pathname);          if (path == NULL) {              Py_DECREF(error_ob);              Py_DECREF(mod_name); | 
