From adbc843e6309b8e78b6b48a1e1e63615af5b7b7a Mon Sep 17 00:00:00 2001 From: Adnan Yaqoob Virk Date: Thu, 3 Mar 2016 14:26:50 +0500 Subject: [PATCH 1/2] Fix: Symbol not found error while loading dynamic python extensions. --- src/pythoninlua.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/pythoninlua.c b/src/pythoninlua.c index c13530e..0d31a21 100644 --- a/src/pythoninlua.c +++ b/src/pythoninlua.c @@ -21,6 +21,7 @@ */ #include +#include /* need this to build with Lua 5.2: defines luaL_register() macro */ #define LUA_COMPAT_MODULE @@ -578,6 +579,20 @@ LUA_API int luaopen_python(lua_State *L) #endif Py_SetProgramName(argv[0]); PyImport_AppendInittab("lua", PyInit_lua); + + /* Loading python library symbols so that dynamic extensions don't throw symbol not found error. + Ref Link: http://stackoverflow.com/questions/29880931/importerror-and-pyexc-systemerror-while-embedding-python-script-within-c-for-pam + */ + char str_python_lib[17]; +#ifdef _WIN32 + sprintf(str_python_lib, "libpython%d.%d.dll", PY_MAJOR_VERSION, PY_MINOR_VERSION); +#elif defined __unix__ + sprintf(str_python_lib, "libpython%d.%d.so", PY_MAJOR_VERSION, PY_MINOR_VERSION); +#elif defined __APPLE__ + sprintf(str_python_lib, "libpython%d.%d.dylib", PY_MAJOR_VERSION, PY_MINOR_VERSION); +#endif + dlopen(str_python_lib, RTLD_NOW | RTLD_GLOBAL); + Py_Initialize(); PySys_SetArgv(1, argv); /* Import 'lua' automatically. */ From 4584aa779b0b78e8b01ae76fc51ce00d7551ba23 Mon Sep 17 00:00:00 2001 From: Adnan Yaqoob Virk Date: Thu, 3 Mar 2016 14:31:55 +0500 Subject: [PATCH 2/2] Buffer overflow fix while loading python library. --- src/pythoninlua.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pythoninlua.c b/src/pythoninlua.c index 0d31a21..7c39b0a 100644 --- a/src/pythoninlua.c +++ b/src/pythoninlua.c @@ -583,7 +583,7 @@ LUA_API int luaopen_python(lua_State *L) /* Loading python library symbols so that dynamic extensions don't throw symbol not found error. Ref Link: http://stackoverflow.com/questions/29880931/importerror-and-pyexc-systemerror-while-embedding-python-script-within-c-for-pam */ - char str_python_lib[17]; + char str_python_lib[20]; #ifdef _WIN32 sprintf(str_python_lib, "libpython%d.%d.dll", PY_MAJOR_VERSION, PY_MINOR_VERSION); #elif defined __unix__