Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Maintenance:8587
freeradius-server.openSUSE_Leap_42.3_Update
a1eccee1.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File a1eccee1.patch of Package freeradius-server.openSUSE_Leap_42.3_Update
commit a1eccee1872b4019e98e399f0f4597a41ef057a7 Author: Arran Cudbard-Bell <a.cudbardb@freeradius.org> Date: Wed Jul 5 12:40:47 2017 -0400 FR-AD-002 - Bind the lifetime of program name and python path to the module PySys_SetPath and PySys_SetName don't appear to duplicate the buffer, they just store a pointer. diff --git a/src/modules/rlm_python/rlm_python.c b/src/modules/rlm_python/rlm_python.c index c52cec52c..8261cfd7a 100644 --- a/src/modules/rlm_python/rlm_python.c +++ b/src/modules/rlm_python/rlm_python.c @@ -67,6 +67,11 @@ typedef struct rlm_python_t { char const *name; //!< Name of the module instance PyThreadState *sub_interpreter; //!< The main interpreter/thread used for this instance. char const *python_path; //!< Path to search for python files in. + +#if PY_VERSION_HEX > 0x03050000 + wchar_t *wide_name; //!< Special wide char encoding of radiusd name. + wchar_t *wide_path; //!< Special wide char encoding of radiusd path. +#endif PyObject *module; //!< Local, interpreter specific module, containing //!< FreeRADIUS functions. bool cext_compat; //!< Whether or not to create sub-interpreters per module @@ -855,19 +860,15 @@ static int python_interpreter_init(rlm_python_t *inst, CONF_SECTION *conf) #if PY_VERSION_HEX > 0x03050000 { - wchar_t *name; - - wide_name = Py_DecodeLocale(main_config.name, strlen(main_config.name)); + inst->wide_name = Py_DecodeLocale(main_config.name, strlen(main_config.name)); Py_SetProgramName(name); /* The value of argv[0] as a wide char string */ - PyMem_RawFree(name); } #else { char *name; - name = talloc_strdup(NULL, main_config.name); + memcpy(&name, &main_config.name, sizeof(name)); Py_SetProgramName(name); /* The value of argv[0] as a wide char string */ - talloc_free(name); } #endif @@ -903,23 +904,23 @@ static int python_interpreter_init(rlm_python_t *inst, CONF_SECTION *conf) /* * Set the python search path + * + * The path buffer does not appear to be dup'd + * so its lifetime should really be bound to + * the lifetime of the module. */ if (inst->python_path) { #if PY_VERSION_HEX > 0x03050000 { - wchar_t *name; - - path = Py_DecodeLocale(inst->python_path, strlen(inst->python_path)); + inst->wide_path = Py_DecodeLocale(inst->python_path, strlen(inst->python_path)); PySys_SetPath(path); - PyMem_RawFree(path); } #else { char *path; - path = talloc_strdup(NULL, inst->python_path); + memcpy(&path, inst->python_path, sizeof(path)); PySys_SetPath(path); - talloc_free(path); } #endif } @@ -1087,8 +1088,14 @@ static int mod_detach(void *instance) PyThreadState_Swap(main_interpreter); /* Swap to the main thread */ Py_Finalize(); dlclose(python_dlhandle); + +#if PY_VERSION_HEX > 0x03050000 + if (inst->wide_name) PyMem_RawFree(inst->wide_name); + if (inst->wide_path) PyMem_RawFree(inst->wide_path); +#endif } + return ret; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor