From: RĂ©mi Denis-Courmont Date: Wed, 10 Feb 2010 20:40:51 +0000 (+0200) Subject: fix seg'faulty sout_StreamChainDelete ordering X-Git-Tag: 1.1.0-ff~194 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=f9db0ea18e2780f43cdb10c6c82b83db77924321;p=vlc fix seg'faulty sout_StreamChainDelete ordering We must delete from the head to the tail, the opposite of the creation order. This stems from the fact that an stream output object "sees" the next element, and may try to use it while being deleted. The crash was easily reproducible with: vlc --sout-keep --sout '#duplicate{dst=gather:std{mux=ts,dst=/dev/null}}' \ -I oldrc -vv raw_es.mp2 --- diff --git a/src/stream_output/stream_output.c b/src/stream_output/stream_output.c index b1045d2e46..19b1499540 100644 --- a/src/stream_output/stream_output.c +++ b/src/stream_output/stream_output.c @@ -815,10 +815,11 @@ void sout_StreamChainDelete(sout_stream_t *p_first, sout_stream_t *p_last) if(!p_first) return; - if(p_first != p_last) - sout_StreamChainDelete(p_first->p_next, p_last); + sout_stream_t *p_next = p_first->p_next; sout_StreamDelete(p_first); + if(p_first != p_last) + sout_StreamChainDelete(p_next, p_last); } /* Create a "stream_out" module, which may forward its ES to p_next module */