[sr-dev] git:master: modules/sipcapture: Fixed crash in module initialization

Marius Zbihlei marius.zbihlei at 1and1.ro
Mon Oct 8 16:44:05 CEST 2012


Module: sip-router
Branch: master
Commit: f86ab01f7e3c6a4b196c5fe42543b18168f6d969
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=f86ab01f7e3c6a4b196c5fe42543b18168f6d969

Author: Dragos Dinu <dragos.dinu at 1and1.ro>
Committer: Marius Zbihlei <marius.zbihlei at 1and1.ro>
Date:   Mon Oct  8 17:42:20 2012 +0300

modules/sipcapture: Fixed crash in module initialization

Leaving the default table_name parameter caused a segmentation fault
Reported by Juha Heinanen

---

 modules/sipcapture/sipcapture.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/modules/sipcapture/sipcapture.c b/modules/sipcapture/sipcapture.c
index 818c342..14a3b4c 100644
--- a/modules/sipcapture/sipcapture.c
+++ b/modules/sipcapture/sipcapture.c
@@ -189,6 +189,7 @@ db1_con_t *db_con = NULL; 		/*!< database connection */
 db_func_t db_funcs;      		/*!< Database functions */
 
 str* table_names = NULL;
+char* table_name_cpy = NULL;
 unsigned int no_tables = 0;
 
 /*multiple table mode*/
@@ -253,7 +254,7 @@ static param_export_t params[] = {
 	{"destination_ip_column",	STR_PARAM, &dest_ip_column.s	},
 	{"destination_port_column",	STR_PARAM, &dest_port_column.s	},		
 	{"contact_ip_column",		STR_PARAM, &contact_ip_column.s },
-	{"contact_port_column",		STR_PARAM, &contact_port_column.s	},
+	{"contact_port_column",		STR_PARAM, &contact_port_column.s},
 	{"originator_ip_column",	STR_PARAM, &orig_ip_column.s    },
 	{"originator_port_column",	STR_PARAM, &orig_port_column.s  },
 	{"proto_column",		STR_PARAM, &proto_column.s },
@@ -324,7 +325,16 @@ static int mt_init(void) {
 
 	/*parse and save table names*/
 	no_tables = 1;
-	p = table_name.s;
+
+	table_name_cpy = (char *) pkg_malloc(sizeof(char) * table_name.len + 1 );
+	if (table_name_cpy == NULL){
+		LM_ERR("no more pkg memory left\n");
+		return -1;
+	}
+	memcpy (table_name_cpy, table_name.s, table_name.len);
+	table_name_cpy[table_name.len] = '\0';
+
+	p = table_name_cpy;
 
 	while (*p)
 	{
@@ -340,7 +350,7 @@ static int mt_init(void) {
 		LM_ERR("no more pkg memory left\n");
 		return -1;
 	}
-	p = strtok (table_name.s,"| \t");
+	p = strtok (table_name_cpy,"| \t");
 	while (p != NULL)
 	{
 		LM_INFO ("INFO: table name:%s\n",p);
@@ -666,6 +676,10 @@ static void destroy(void)
                 }                		
 		close(raw_sock_desc);
 	}
+
+	if (table_name_cpy){
+		pkg_free(table_name_cpy);
+	}
 	if (table_names){
 		pkg_free(table_names);
 	}




More information about the sr-dev mailing list