[sr-dev] set_ruri_host crash

Juha Heinanen jh at tutpro.com
Fri Apr 7 15:32:09 CEST 2017


Daniel-Constantin Mierla writes:

> What OS do you have and which version of gdb? The list command should
> list the code around the line where the crash happens, but it doesn't do
> it for you.

this is debian jessie with GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1.

> Anyhow, you can extract the code around src/modules/pv/pv_core.c:2243
> and send it here, to be sure it is the one you use at the time of
> crash.

i built new deb from latest master and re-run the crash.  gdb tells:

2238	pv_core.c: No such file or directory.
(gdb) wher
#0  0x00007f35327933e0 in pv_set_ruri_host (msg=0x7f353f529dc0, 
    param=0x7f353ebc8400, op=254, val=0x7fff67072c60) at pv_core.c:2238
#1  0x00000000005964dc in lval_pvar_assign (h=0x7fff67073410, 
    msg=0x7f353f529dc0, lv=0x7f353ebc8380, rv=0x7f353ebc8a58)
    at core/lvalue.c:351
#2  0x0000000000596eed in lval_assign (h=0x7fff67073410, msg=0x7f353f529dc0, 
    lv=0x7f353ebc8380, rve=0x7f353ebc8a50) at core/lvalue.c:399
...

(gdb) frame 0
#0  0x00007f35327933e0 in pv_set_ruri_host (msg=0x7f353f529dc0, 
    param=0x7f353ebc8400, op=254, val=0x7fff67072c60) at pv_core.c:2238
2238	in pv_core.c
(gdb) list
2233	in pv_core.c
(gdb) 

and pv_core.c:2238 is marked below.

-- juha

-------------------------------------------------------------------------

int pv_set_ruri_host(struct sip_msg* msg, pv_param_t *param,
		int op, pv_value_t *val)
{
	struct action  act;
	struct run_act_ctx h;
	char backup;

	if(msg==NULL || param==NULL || val==NULL || (val->flags&PV_VAL_NULL))
	{
		LM_ERR("bad parameters\n");
		return -1;
	}

	if(!(val->flags&PV_VAL_STR))
	{
		LM_ERR("str value required to set R-URI hostname\n");
		goto error;
	}

	memset(&act, 0, sizeof(act));
	act.val[0].type = STRING_ST;
	act.val[0].u.string = val->rs.s;
	backup = val->rs.s[val->rs.len];
	val->rs.s[val->rs.len] = '\0';           ********** this
	act.type = SET_HOST_T;
	init_run_actions_ctx(&h);
	if (do_action(&h, &act, msg)<0)
	{
		LM_ERR("do action failed\n");
		val->rs.s[val->rs.len] = backup;
		goto error;
	}
	val->rs.s[val->rs.len] = backup;

	return 0;
error:
	return -1;
}



More information about the sr-dev mailing list