[sr-dev] dlg_handlers.c BUG or missing initialization

Daniel-Constantin Mierla miconda at gmail.com
Wed Feb 10 17:50:47 CET 2010


Hi Torben,

thanks for the patch. I will take care, just on question, is it for 1.5 
or 3.0?

Daniel

On 2/10/10 12:31 PM, Torben Friese wrote:
> Hi all,
>
> we had problems with some callback-functions. The problem is isolated to
> the unref_new_dialog function in dlg_handlers.c
>
> If the whole tmcb_params structure is not initialized, we run into
> segfaults in a later usage.
>
>
> here a patch for this problem ("inspired" by openSIPS code)
>
>
> @@ -417,7 +420,7 @@
>   void unref_new_dialog(void *dialog)
>   {
>   	struct tmcb_params p;
> -
> +	memset(&p, 0, sizeof(struct tmcb_params));
>   	p.param = (void*)&dialog;
>   	dlg_onreply(0, TMCB_TRANS_DELETED,&p);
>   }
>
>
> Down below the whole patch for the dlg_handlers.c file, the second thing
> is a extra control part for FAKED_REPLY's in the dlg_onreply function.
>
> I hope this is useful.
>
> best regards
>
> Torben Friese
>
>
>
>
> Index: modules/dialog/dlg_handlers.c
> ===================================================================
> --- modules/dialog/dlg_handlers.c	(revision 5983)
> +++ modules/dialog/dlg_handlers.c	(working copy)
> @@ -280,24 +280,27 @@
>   	if (new_state==DLG_STATE_CONFIRMED_NA&&
>   	old_state!=DLG_STATE_CONFIRMED_NA&&  old_state!=DLG_STATE_CONFIRMED )
> {
>   		LM_DBG("dialog %p confirmed\n",dlg);
> -
> -		/* get to tag*/
> -		if ( !rpl->to&&  ((parse_headers(rpl, HDR_TO_F,0)<0) || !rpl->to) ) {
> -			LM_ERR("bad reply or missing TO hdr :-/\n");
> -			tag.s = 0;
> -			tag.len = 0;
> -		} else {
> -			tag = get_to(rpl)->tag_value;
> -			if (tag.s==0 || tag.len==0) {
> -				LM_ERR("missing TAG param in TO hdr :-/\n");
> +		if (rpl != FAKED_REPLY) {
> +			/* get to tag*/
> +			if ( !rpl->to&&  ((parse_headers(rpl, HDR_TO_F,0)<0) || !rpl->to) )
> {
> +				LM_ERR("bad reply or missing TO hdr :-/\n");
>   				tag.s = 0;
>   				tag.len = 0;
> +			} else {
> +				tag = get_to(rpl)->tag_value;
> +				if (tag.s==0 || tag.len==0) {
> +					LM_ERR("missing TAG param in TO hdr :-/\n");
> +					tag.s = 0;
> +					tag.len = 0;
> +				}
>   			}
> -		}
>
> -		/* save callee's tag, cseq, contact and record route*/
> -		if (populate_leg_info( dlg, rpl, t, DLG_CALLEE_LEG,&tag) !=0) {
> -			LM_ERR("could not add further info to the dialog\n");
> +			/* save callee's tag, cseq, contact and record route*/
> +			if (populate_leg_info( dlg, rpl, t, DLG_CALLEE_LEG,&tag) !=0) {
> +				LM_ERR("could not add further info to the dialog\n");
> +			}
> +		} else {
> +			LM_ERR("Faked reply!\n");
>   		}
>
>   		/* set start time */
> @@ -417,7 +420,7 @@
>   void unref_new_dialog(void *dialog)
>   {
>   	struct tmcb_params p;
> -
> +	memset(&p, 0, sizeof(struct tmcb_params));
>   	p.param = (void*)&dialog;
>   	dlg_onreply(0, TMCB_TRANS_DELETED,&p);
>   }
>
>
> _______________________________________________
> sr-dev mailing list
> sr-dev at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>
>    

-- 
Daniel-Constantin Mierla
eLearning class for Kamailio 3.0.0
* http://www.asipto.com/




More information about the sr-dev mailing list