[asterisk-dev] [Code Review] 2734: Check result of ast_var_assign when out of mem
Matt Jordan
reviewboard at asterisk.org
Mon Aug 5 11:59:09 CDT 2013
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/2734/#review9332
-----------------------------------------------------------
Ship it!
Ship It!
- Matt Jordan
On Aug. 2, 2013, 12:19 p.m., wdoekes wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/2734/
> -----------------------------------------------------------
>
> (Updated Aug. 2, 2013, 12:19 p.m.)
>
>
> Review request for Asterisk Developers.
>
>
> Repository: Asterisk
>
>
> Description
> -------
>
> Due to a different issue, my asterisk was out of memory.
>
> It crashed first when it tried to AST_LIST_INSERT_HEAD(headp, newvariable, entries); a newvariable that was NULL.
>
> #0 0x0000000000535b30 in pbx_builtin_setvar_helper (chan=0x7fb8fd85d368, name=0x7fb93c03ed60 "__record_call", value=0x7fb940a90240 "no") at pbx.c:10202
> 10202 AST_LIST_INSERT_HEAD(headp, newvariable, entries);
> (gdb) back
> #0 0x0000000000535b30 in pbx_builtin_setvar_helper (chan=0x7fb8fd85d368, name=0x7fb93c03ed60 "__record_call", value=0x7fb940a90240 "no") at pbx.c:10202
> #1 0x00007fb94b0a4e1f in sip_new (i=0x94d7ee8, state=0, title=0x7fb940a90ce0 "152960003", linkedid=0x7fb93c058126 "somehost-1374224633.26491") at chan_sip.c:7346
> #2 0x00007fb94b10d9d6 in sip_request_call (type=0x7fb940a91250 "SIP", cap=0x7fb833f3afc0, requestor=0x7fb8fd80b9c8, data=0x7fb940a92190, cause=0x7fb940a91b74) at chan_sip.c:27815
> ...
>
> This patch checks all ast_var_assign() calls found in the 1.8 branch for NULL.
>
> Note that I didn't sprinkle the code with "out of memory" log messages for three reasons: (a) you'll probably notice that you're out of mem anyway, (b) the ast_calloc already mentiones that we're out of mem, (c) the ast_log() call itself has the potential for crashing because of recursion (out of stack space) (*)
>
>
> (*) E.g. here:
> /* Create a new logging message */
> if (!(logmsg = ast_calloc_with_stringfields(1, struct logmsg, res + 128)))
> return;
>
>
> Diffs
> -----
>
> /branches/1.8/apps/app_playback.c 396085
> /branches/1.8/apps/app_stack.c 396085
> /branches/1.8/funcs/func_global.c 396085
> /branches/1.8/funcs/func_strings.c 396085
> /branches/1.8/main/cdr.c 396085
> /branches/1.8/main/pbx.c 396085
> /branches/1.8/pbx/pbx_dundi.c 396085
> /branches/1.8/pbx/pbx_loopback.c 396085
> /branches/1.8/utils/extconf.c 396085
>
> Diff: https://reviewboard.asterisk.org/r/2734/diff/
>
>
> Testing
> -------
>
> It compiles.
>
>
> Thanks,
>
> wdoekes
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20130805/8b316ea0/attachment.htm>
More information about the asterisk-dev
mailing list