diff options
author | Andrew Svetlov <andrew.svetlov@gmail.com> | 2012-11-01 13:31:12 +0200 |
---|---|---|
committer | Andrew Svetlov <andrew.svetlov@gmail.com> | 2012-11-01 13:31:12 +0200 |
commit | c83af6a2bda3609c435b6ce84f990256c593f3d4 (patch) | |
tree | 189c44827c3dba1a46ad12187f3dea03c549798f /Python/dynload_aix.c | |
parent | 7afede10a583e241aea0452c8bc9fe7522509873 (diff) | |
parent | 9e9e8c4bbb70e717829906215e42e2c398f28679 (diff) | |
download | cpython-c83af6a2bda3609c435b6ce84f990256c593f3d4.tar.gz |
Merge issue #16373: Prevent infinite recursion for ABC Set class operations.
Patch by Serhiy Storchaka.
Diffstat (limited to 'Python/dynload_aix.c')
-rw-r--r-- | Python/dynload_aix.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c index 149990d799..b4f71f291a 100644 --- a/Python/dynload_aix.c +++ b/Python/dynload_aix.c @@ -26,11 +26,7 @@ typedef struct Module { void *entry; } Module, *ModulePtr; -const struct filedescr _PyImport_DynLoadFiletab[] = { - {".so", "rb", C_EXTENSION}, - {"module.so", "rb", C_EXTENSION}, - {0, 0} -}; +const char *_PyImport_DynLoadFiletab[] = {".so", NULL}; static int aix_getoldmodules(void **modlistptr) @@ -109,6 +105,8 @@ aix_loaderror(const char *pathname) { char *message[1024], errbuf[1024]; + PyObject *pathname_ob = NULL; + PyObject *errbuf_ob = NULL; register int i,j; struct errtab { @@ -129,7 +127,6 @@ aix_loaderror(const char *pathname) {L_ERROR_ERRNO, NULL} }; -#define LOAD_ERRTAB_LEN (sizeof(load_errtab)/sizeof(load_errtab[0])) #define ERRBUF_APPEND(s) strncat(errbuf, s, sizeof(errbuf)-strlen(errbuf)-1) PyOS_snprintf(errbuf, sizeof(errbuf), "from module %.200s ", pathname); @@ -140,7 +137,7 @@ aix_loaderror(const char *pathname) } for(i = 0; message[i] && *message[i]; i++) { int nerr = atoi(message[i]); - for (j=0; j<LOAD_ERRTAB_LEN ; j++) { + for (j=0; j < Py_ARRAY_LENGTH(load_errtab); j++) { if (nerr == load_errtab[j].errNo && load_errtab[j].errstr) ERRBUF_APPEND(load_errtab[j].errstr); } @@ -149,12 +146,16 @@ aix_loaderror(const char *pathname) ERRBUF_APPEND("\n"); } errbuf[strlen(errbuf)-1] = '\0'; /* trim off last newline */ - PyErr_SetString(PyExc_ImportError, errbuf); + pathname_ob = PyUnicode_FromString(pathname); + errbuf_ob = PyUnicode_FromString(errbuf); + PyErr_SetImportError(errbuf_ob, NULL, pathname); + Py_DECREF(pathname_ob); + Py_DECREF(errbuf_ob); return; } -dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname, +dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname, const char *pathname, FILE *fp) { dl_funcptr p; |