Skip to content
Snippets Groups Projects
  • Richard Mudgett's avatar
    6c4d1c32
    features: Fix crash when transferee hangs up during DTMF attended transfer. · 6c4d1c32
    Richard Mudgett authored
    A crash happens with this sequence of steps:
    1) Party A is connected to party B.
    2) Party B starts a DTMF attended transfer.
    3) Party A hangs up while party B is dialing party C.
    
    When party A hangs up the bridge that party A and party B are in is
    dissolved and party B is kicked out of the bridge.  When party B finishes
    dialing party C he attempts to move to the new bridge with party C.  Since
    party B is no longer in a bridge the attempted move dereferences a NULL
    bridge_channel pointer and crashes.
    
    * Made the hold(), unhold(), ringing(), and the bridge_move() functions
    tolerant of the channel not being in a bridge.  The assertion that party B
    is always in a bridge is not true if the bridged peer of party B hangs up
    and dissolves the bridge.  Being tolerant of not being in a bridge allows
    the peer hangup stimulus to be processed by the FSM.
    
    * Made the bridge_move() function return void since where the return value
    for a failed move was checked generated a FSM coding ERROR message for a
    normal off-nominal condition.
    
    * Eliminated most uses of RAII_VAR in bridge_basic.c.
    
    ASTERISK-25003 #close
    Reported by: Artem Volodin
    
    Change-Id: Ie2c1b14e5e647d4ea6de300bf56d69805d7bcada
    6c4d1c32
    History
    features: Fix crash when transferee hangs up during DTMF attended transfer.
    Richard Mudgett authored
    A crash happens with this sequence of steps:
    1) Party A is connected to party B.
    2) Party B starts a DTMF attended transfer.
    3) Party A hangs up while party B is dialing party C.
    
    When party A hangs up the bridge that party A and party B are in is
    dissolved and party B is kicked out of the bridge.  When party B finishes
    dialing party C he attempts to move to the new bridge with party C.  Since
    party B is no longer in a bridge the attempted move dereferences a NULL
    bridge_channel pointer and crashes.
    
    * Made the hold(), unhold(), ringing(), and the bridge_move() functions
    tolerant of the channel not being in a bridge.  The assertion that party B
    is always in a bridge is not true if the bridged peer of party B hangs up
    and dissolves the bridge.  Being tolerant of not being in a bridge allows
    the peer hangup stimulus to be processed by the FSM.
    
    * Made the bridge_move() function return void since where the return value
    for a failed move was checked generated a FSM coding ERROR message for a
    normal off-nominal condition.
    
    * Eliminated most uses of RAII_VAR in bridge_basic.c.
    
    ASTERISK-25003 #close
    Reported by: Artem Volodin
    
    Change-Id: Ie2c1b14e5e647d4ea6de300bf56d69805d7bcada