[asterisk-commits] trunk r31843 - /trunk/channels/chan_sip.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Sat Jun 3 15:56:46 MST 2006
Author: rizzo
Date: Sat Jun 3 17:56:45 2006
New Revision: 31843
URL: http://svn.digium.com/view/asterisk?rev=31843&view=rev
Log:
mark XXX a buggy section of code and implement a probable
replacement (leave the original in case my code does not
do what the function was meant to do).
oej, please check this...
Modified:
trunk/channels/chan_sip.c
Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?rev=31843&r1=31842&r2=31843&view=diff
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Sat Jun 3 17:56:45 2006
@@ -11626,9 +11626,28 @@
*/
/* Skip leading whitespace */
- while(replace_id[0] && (replace_id[0] < 33))
- memmove(replace_id, replace_id+1, strlen(replace_id));
-
+ replace_id = ast_skip_blanks(replace_id);
+
+ /* XXX there are several bugs in the code below,
+ * because 'ptr' can be NULL so all the dereferences in strcasestr()
+ * would cause panics.
+ * I think we should do something like the code below, which also has
+ * the advantage of not depending on the order of headers.
+ * Please test if it works, and in case remove the block in #else / #endif
+ */
+#if 1 /* proposed replacement */
+
+ start = replace_id;
+ while ( (ptr = strsep(&start, ";")) ) {
+ ptr = ast_skip_blanks(ptr); /* XXX maybe unnecessary ? */
+ if ( (to = strcasestr(ptr, "to-tag=") ) )
+ totag = to + 7; /* skip the keyword */
+ else if ( (to = strcasestr(ptr, "from-tag=") ) ) {
+ fromtag = to + 9; /* skip the keyword */
+ fromtag = strsep(&fromtag, "&"); /* trim what ? */
+ }
+ }
+#else /* original code, buggy */
if ((ptr = strchr(replace_id, ';'))) {
*ptr = '\0';
ptr++;
@@ -11641,6 +11660,7 @@
totag = ptr;
if ((to = strchr(ptr, ';')))
*to = '\0';
+ /* XXX this code is also wrong as to can be NULL */
to++;
ptr = to;
}
@@ -11654,6 +11674,7 @@
if ((to = strchr(ptr, ';')))
*to = '\0';
}
+#endif
if (sipdebug && option_debug > 3)
ast_log(LOG_DEBUG,"Invite/replaces: Will use Replace-Call-ID : %s Fromtag: %s Totag: %s\n", replace_id, fromtag ? fromtag : "<no from tag>", totag ? totag : "<no to tag>");
More information about the asterisk-commits
mailing list