[asterisk-dev] [Code Review] 3885: chan_iax2: Fix a crash caused by trying to allow all codecs on a chan_iax2 peer
Jonathan Rose
reviewboard at asterisk.org
Thu Jul 31 16:40:53 CDT 2014
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/3885/
-----------------------------------------------------------
Review request for Asterisk Developers.
Bugs: ASTERISK-24107
https://issues.asterisk.org/jira/browse/ASTERISK-24107
Repository: Asterisk
Description
-------
When using an IAX2 peer configured with:
allow=all
Asterisk will segfault when building the peer while loading chan_iax2.so
This is caused by ast_format_cmp trying to compare two ast_format structs using the codec opus format interface defined in res_format_attr_opus. This format interface doesn't define a format comparison function, so when we try to use this undefined function, boom.
The fix for this was to treat an interface without a comparison function in the same manner as we treat comparison with formats that don't have interfaces.
Diffs
-----
/trunk/main/format.c 419870
Diff: https://reviewboard.asterisk.org/r/3885/diff/
Testing
-------
It doesn't crash anymore. That's a start. I also checked the output for the CLI command 'iax2 show peer' for the peer I was using to define all the codecs and that appeared to work alright. Also made a call with just opus and ulaw set as codecs (opus should have been the preferred). Opus ended up not being included in the list of preferred codecs (although output for just Codecs still includes it for some reason) and when making a call the endpoint would choose ulaw.
*CLI> iax2 show peer lappy
* Name : lappy
Description :
Secret : <Set>
Context : default
Parking lot :
Mailbox :
Dynamic : Yes
Callnum limit: 0
Calltoken req: No
Trunk : No
Encryption : No
Callerid : "" <>
Expire : 4
ACL : No
Addr->IP : 10.24.16.82 Port 4569
Defaddr->IP : (null) Port (null)
Username : lappy
Codecs : (ulaw|opus)
Codec Order : (ulaw)
Status : OK (38 ms)
Qualify : every 60000ms when OK, every 10000ms when UNREACHABLE (sample smoothing Off)
*CLI>
*CLI>
*CLI>
*CLI> -- Accepting AUTHENTICATED call from 10.24.16.82:4569:
-- > requested format = ulaw,
-- > requested prefs = (),
-- > actual format = ulaw,
-- > host prefs = (ulaw),
-- > priority = mine
It gets slightly weirder right now when more stuff is specified after opus...
[deskbox]
disallow=all
allow=opus
allow=ulaw
allow=alaw
results:
*CLI> iax2 show peer deskbox
* Name : deskbox
Description :
Secret : <Set>
Context : default
Parking lot :
Mailbox :
Dynamic : Yes
Callnum limit: 0
Calltoken req: No
Trunk : No
Encryption : No
Callerid : "" <>
Expire : -1
ACL : No
Addr->IP : (null) Port (null)
Defaddr->IP : (null) Port (null)
Username : deskbox
Codecs : (ulaw|alaw)
Codec Order : (ulaw|alaw)
Status : UNKNOWN
Qualify : every 60000ms when OK, every 10000ms when UNREACHABLE (sample smoothing Off)
This is due to a quirk with how we are currently building the codec preferences list and may get resolved by some stuff rmudgett is working on, so this patch just focuses on resolving the crash.
Thanks,
Jonathan Rose
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20140731/c6dae86a/attachment.html>
More information about the asterisk-dev
mailing list