Module: sip-router
Branch: 3.1
Commit: ff5694ff911aa71e76f80b0d0b9dc94b04eb5132
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=ff5694f…
Author: Michal Karas <largon(a)largon.net>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Mon Oct 17 11:18:51 2011 +0200
app_python: fixing clone string for dirname and basename
- variable tname replaced by dname_src and bname_src, because both
dirname() and basename() requires it's argument not to change: "These
functions may return pointers to statically allocated memory which may
be overwritten by subsequent calls. Alternatively, they may return a
pointer to some part of path, so that the string referred to by path
should not be modified or freed until the pointer returned by the
function is no longer required."
- related to FS#137
Signed-off-by: Daniel-Constantin Mierla <miconda(a)gmail.com>
(cherry picked from commit d05616d81960e6b1647981d8d8b5e0dbe04a3dcb)
---
modules/app_python/python_mod.c | 25 ++++++++++++++-----------
1 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/modules/app_python/python_mod.c b/modules/app_python/python_mod.c
index c89c928..c178551 100644
--- a/modules/app_python/python_mod.c
+++ b/modules/app_python/python_mod.c
@@ -85,7 +85,7 @@ struct module_exports exports = {
static int
mod_init(void)
{
- char *dname, *bname, *tname;
+ char *dname, *bname, *dname_src, *bname_src;
int i;
PyObject *sys_path, *pDir, *pModule, *pFunc, *pArgs;
PyThreadState *mainThreadState;
@@ -100,19 +100,19 @@ mod_init(void)
child_init_mname.len = strlen(child_init_mname.s);
}
- tname = as_asciiz(&script_name);
- if(tname==NULL)
- {
- LM_ERR("no more pkg memory\n");
- return -1;
- }
- dname = dirname(tname);
+ dname_src = as_asciiz(&script_name);
+ bname_src = as_asciiz(&script_name);
+ if(dname_src==NULL || bname_src==NULL)
+ {
+ LM_ERR("no more pkg memory\n");
+ return -1;
+ }
+
+ dname = dirname(dname_src);
if (strlen(dname) == 0)
dname = ".";
- memcpy(tname, script_name.s, script_name.len);
- bname = basename(tname);
+ bname = basename(bname_src);
i = strlen(bname);
- pkg_free(tname);
if (bname[i - 1] == 'c' || bname[i - 1] == 'o')
i -= 1;
if (bname[i - 3] == '.' && bname[i - 2] == 'p' &&
bname[i - 1] == 'y') {
@@ -159,6 +159,9 @@ mod_init(void)
return -1;
}
+ pkg_free(dname_src);
+ pkg_free(bname_src);
+
pFunc = PyObject_GetAttrString(pModule, mod_init_fname.s);
Py_DECREF(pModule);
/* pFunc is a new reference */