Module: sip-router
Branch: 3.2
Commit: ec8535487fd06e5de7b5efa218f764a6e850b42b
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=ec85354…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Thu Nov 24 15:30:15 2011 +0100
textops(k): free only pkg body lumps for set_body()
- if set_body() is used in failure_route, it should not destroy
completely the lumps cloned in tm, just ignore them and free the ones
added in failure_route before execution of itself
- reported by Brandon Armstead, FS#181
(cherry picked from commit c22a3ec7366ad1a3cc0b5e8229fbabe2c179cca1)
---
modules_k/textops/textops.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/modules_k/textops/textops.c b/modules_k/textops/textops.c
index f2f89bb..4ebd831 100644
--- a/modules_k/textops/textops.c
+++ b/modules_k/textops/textops.c
@@ -1254,7 +1254,7 @@ static int set_body_f(struct sip_msg* msg, char* p1, char* p2)
return -1;
}
- free_lump_list(msg->body_lumps);
+ del_nonshm_lump( &(msg->body_lumps) );
msg->body_lumps = NULL;
if (msg->content_length)
Module: sip-router
Branch: 3.2
Commit: d44956c4f3d5fb98bc2af42d8718a420d624d259
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=d44956c…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Thu Nov 24 12:56:28 2011 +0100
core: save and restore branch_iterator in print_dset
- safe usage in branch_route where branch_interator is used to add the
new brnaches, but some variables can change it if used in config
branch_route
- closes FS#182, reported by Pawel Sternal
(cherry picked from commit c5f101dfac9a50f428e3452893c402d8b1e0400b)
---
dset.c | 21 ++++++++++++++++++++-
dset.h | 8 ++++++--
2 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/dset.c b/dset.c
index f8bb337..4ba5ccf 100644
--- a/dset.c
+++ b/dset.c
@@ -191,11 +191,21 @@ void init_branch_iterator(void)
branch_iterator = 0;
}
+/**
+ * return the value of current branch iterator
+ */
int get_branch_iterator(void)
{
return branch_iterator;
}
+/**
+ * set the value of current branch interator
+ */
+void set_branch_iterator(int n)
+{
+ branch_iterator = n;
+}
/** \brief Get a branch from the destination set
@@ -366,6 +376,7 @@ char* print_dset(struct sip_msg* msg, int* len)
qvalue_t q;
str uri;
char* p, *qbuf;
+ int crt_branch;
static char dset[MAX_REDIRECTION_LEN];
if (msg->new_uri.s) {
@@ -379,6 +390,9 @@ char* print_dset(struct sip_msg* msg, int* len)
*len = 0;
}
+ /* backup current branch index to restore it later */
+ crt_branch = get_branch_iterator();
+
init_branch_iterator();
while ((uri.s = next_branch(&uri.len, &q, 0, 0, 0, 0))) {
cnt++;
@@ -394,7 +408,7 @@ char* print_dset(struct sip_msg* msg, int* len)
if (*len + 1 > MAX_REDIRECTION_LEN) {
LOG(L_ERR, "ERROR: redirection buffer length exceed\n");
- return 0;
+ goto error;
}
memcpy(dset, CONTACT, CONTACT_LEN);
@@ -445,7 +459,12 @@ char* print_dset(struct sip_msg* msg, int* len)
}
memcpy(p, CRLF " ", CRLF_LEN + 1);
+ set_branch_iterator(crt_branch);
return dset;
+
+error:
+ set_branch_iterator(crt_branch);
+ return 0;
}
diff --git a/dset.h b/dset.h
index 6f9f067..dfc3083 100644
--- a/dset.h
+++ b/dset.h
@@ -107,15 +107,19 @@ static inline int ser_append_branch(struct sip_msg* msg,
/*! \brief
- * Iterate through the list of transaction branches
+ * Init the index to iterate through the list of transaction branches
*/
void init_branch_iterator(void);
/*! \brief
- * Return branch iterator position
+ * Return branch iterator position
*/
int get_branch_iterator(void);
+/*! \brief
+ * Set branch iterator position
+ */
+void set_branch_iterator(int n);
/*! \brief Get the next branch in the current transaction.
* @return pointer to the uri of the next branch (which the length written in
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#180 - DOUBLE FREE / CRASH in parse_to.c
User who did this - Bayan Towfiq (btowfiq)
----------
still looks good you can back port to 3.2 & 3.1
----------
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=180#comment421
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#173 - Double Free -- Crash/Coredump and possible security vulnerability
User who did this - Bayan Towfiq (btowfiq)
----------
The dlgnewref has been working well. Please commit/backport the fixes to 3.2 .
----------
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=173#comment420
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
Hi,
Kamailio 3.2 is crashing if t_release() is executed after
t_relay_to() returns -1
---
if ! t_relay_to() {
t_release();
}
---
Error -1 is generated in t_relay_to, in this case, when trying to
reach a domainname which hasn't got a DNS record.
Here the log of the execution of t_relay_to:
ERROR: <core> [resolve.c:1540]: ERROR: sip_hostport2su: could not
resolve hostname: "proxy1.jssip.net"
ERROR: tm [ut.h:318]: failed to resolve "proxy1.jssip.net"
ERROR: tm [t_fwd.c:1528]: ERROR: t_forward_nonack: failure to add branches
ERROR: tm [tm.c:1369]: ERROR: w_t_relay_to: t_relay_to failed
WARNING: script | uovyxruroybhnsy | call | t_relay(): -1 generic internal error
This is the log for the execution of t_release():
<core> [mem/q_malloc.c:457]: BUG: qm_free: freeing already freed
pointer, first free: tm: h_table.c: free_cell(157) - aborting
ALERT: <core> [main.c:745]: child process 24217 exited by a signal 6
ALERT: <core> [main.c:748]: core was not generated
INFO: <core> [main.c:760]: INFO: terminating due to SIGCHLD
INFO: <core> [main.c:811]: INFO: signal 15 received
Thanks in advance.