<div dir="ltr"><div class="gmail_default" style="color:#000000">Hi,</div><div class="gmail_default" style="color:#000000"><br></div><div class="gmail_default" style="color:#000000">We are able to reproduce the issue with the 1.1 opus_demo (sample file). We captured the frames in our server just before the opus_decode and fed the file to opus_demo (1.1) and it is crashing. Same file is tested with 1.1.1 and it is fine. So this is in  line with our server testing observation and I think here we can conclude that the 1.1 library is crashing while handling a specific mode frame as explained in my earlier mail.</div><div class="gmail_default" style="color:#000000"><br></div><div class="gmail_default" style="color:#000000">Here I&#39;m attaching the captured opus encoded file which is causing the crash.</div><div class="gmail_default" style="color:#000000"><br></div><div class="gmail_default" style="color:#000000">Thanks</div><div class="gmail_default" style="color:#000000">Suresh</div><div class="gmail_default" style="color:#000000"><br></div><div class="gmail_default" style="color:#000000"><br></div><div class="gmail_default" style="color:#000000"><br></div><div class="gmail_default" style="color:#000000"><br></div><div class="gmail_default" style="color:#000000"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On 17 April 2015 at 02:27, Jean-Marc Valin <span dir="ltr">&lt;<a href="mailto:jmvalin@jmvalin.ca" target="_blank">jmvalin@jmvalin.ca</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">To be decodable by opus_demo, you&#39;ll have to add the 8-byte &quot;header&quot;.<br>
Just put in the length of the packet followed by &quot;0&quot; for the encoder<br>
range (0 means &quot;not present&quot;).<br>
<br>
That being said, from previous experience, the most likely cause of the<br>
crash is a bug in your software causing a corruption in Opus. So it&#39;s<br>
safe to assume that if you can&#39;t reproduce the bug using opus_demo, then<br>
that&#39;s indeed the case.<br>
<br>
Cheers,<br>
<br>
        Jean-Marc<br>
<span class=""><br>
On 16/04/15 08:32 AM, Suresh Thiriveedi wrote:<br>
&gt; This is observed on a live call between webRTC browser client and<br>
&gt; another legacy client. Our server is there  in between and transcoding<br>
&gt; from opus to another codec and this is observed while decoding the opus.<br>
&gt;<br>
&gt; Anyway, I&#39;ll try to capture/dump the packets in the server before<br>
&gt; feeding to the opus_decode and share with you. But this will not have<br>
&gt; the first 8 bytes (length+enc range) to directly feed to the sample<br>
&gt; binary. Please let me know if this is fine.<br>
&gt;<br>
&gt; Thanks<br>
&gt; Suresh<br>
&gt;<br>
&gt; On 16 April 2015 at 17:36, Jean-Marc Valin &lt;<a href="mailto:jmvalin@jmvalin.ca">jmvalin@jmvalin.ca</a><br>
</span><span class="">&gt; &lt;mailto:<a href="mailto:jmvalin@jmvalin.ca">jmvalin@jmvalin.ca</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt;     Please provide the input file that produces this with opus_demo.<br>
&gt;<br>
&gt;     On 16/04/15 03:24 AM, Suresh Thiriveedi wrote:<br>
&gt;     &gt; Hi  Jean-Marc,<br>
&gt;     &gt;<br>
&gt;     &gt; Could you please update if you got a chance to look into. As I<br>
&gt;     &gt; mentioned, I don&#39;t see the same issue in 1.1.1, but I don&#39;t see any<br>
&gt;     &gt; difference in 1.1.1 other than optimization based on the architecture.<br>
&gt;     &gt; This optimization could have fixed some stack overflow issue in some<br>
&gt;     &gt; specific cases?<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt; Thanks<br>
&gt;     &gt; Suresh<br>
&gt;     &gt;<br>
&gt;     &gt; On 13 April 2015 at 12:39, Suresh Thiriveedi &lt;<a href="mailto:sthiriveedi@gmail.com">sthiriveedi@gmail.com</a> &lt;mailto:<a href="mailto:sthiriveedi@gmail.com">sthiriveedi@gmail.com</a>&gt;<br>
</span><div><div class="h5">&gt;     &gt; &lt;mailto:<a href="mailto:sthiriveedi@gmail.com">sthiriveedi@gmail.com</a> &lt;mailto:<a href="mailto:sthiriveedi@gmail.com">sthiriveedi@gmail.com</a>&gt;&gt;&gt; wrote:<br>
&gt;     &gt;<br>
&gt;     &gt;     Hi Jean-Marc,<br>
&gt;     &gt;<br>
&gt;     &gt;     Thanks for your response. Please find the details as below.<br>
&gt;     &gt;<br>
&gt;     &gt;     *_Backtrace we got for this crash:_*<br>
&gt;     &gt;<br>
&gt;     &gt;     #0  0x0000000000800c54 in opus_decode_frame (st=0x38906b8f99d09c5,<br>
&gt;     &gt;<br>
&gt;     &gt;         data=0xf0aa10b4ef1008ae &lt;Address 0xf0aa10b4ef1008ae out of<br>
&gt;     &gt;     bounds&gt;, len=-188613428, pcm=0x6e80016085efd57,<br>
&gt;     &gt;<br>
&gt;     &gt;         frame_size=44037315, decode_fec=58716895) at<br>
&gt;     src/opus_decoder.c:384<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;     #1  0x00000000008009c0 in opus_decode_frame (st=0x712357d0,<br>
&gt;     &gt;<br>
&gt;     &gt;         data=0x7effff9ab72d<br>
&gt;     &gt;<br>
&gt;      &quot;~▒`\\▒K\005▒▒y▒w+g~▒S2\025▒\036T▒\002x▒▒h!▒▒▒\220\233\066s▒\030#gb<br>
&gt;     &gt;     \rn▒rF\005Q▒\213;▒`\207$O▒(m\222=9▒▒/h▒▒t▒▒E묳w▒\237\&quot;\206z\005<br>
&gt;     &gt;     \213»u@e&quot;, len=88, pcm=0x7effff9a6a80, frame_size=640,<br>
&gt;     decode_fec=0)<br>
&gt;     &gt;     at src/opus_decoder.c:319<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;     #2  0x0000000000801be1 in opus_decode_native (st=0x712357d0,<br>
&gt;     &gt;<br>
&gt;     &gt;         data=0x7effff9ab72d<br>
&gt;     &gt;<br>
&gt;      &quot;~▒`\\▒K\005▒▒y▒w+g~▒S2\025▒\036T▒\002x▒▒h!▒▒▒\220\233\066s▒\030#gb<br>
&gt;     &gt;     \rn▒rF\005Q▒\213;▒`\207$O▒(m\222=9▒▒/h▒▒t▒▒E묳w▒\237\&quot;\206z\005<br>
&gt;     &gt;     \213»u@e&quot;, len=89, pcm=0x7effff9a6a80, frame_size=640,<br>
&gt;     decode_fec=0,<br>
&gt;     &gt;     self_delimited=0,<br>
&gt;     &gt;<br>
&gt;     &gt;         packet_offset=0x0, soft_clip=1) at src/opus_decoder.c:681<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;     #3  0x000000000080226c in opus_decode (st=0x712357d0,<br>
&gt;     &gt;<br>
&gt;     &gt;         data=0x7effff9ab72c<br>
&gt;     &gt;<br>
&gt;      &quot;▒~▒`\\▒K\005▒▒y▒w+g~▒S2\025▒\036T▒\002x▒▒h!▒▒▒\220\233\066s▒\030#gb<br>
&gt;     &gt;     \rn▒rF\005Q▒\213;▒`\207$O▒(m\222=9▒▒/h▒▒t▒▒E묳w▒\237\&quot;\206z\005<br>
&gt;     &gt;     \213»u@e&quot;, len=89, pcm=0x71245a60, frame_size=640,<br>
&gt;     decode_fec=0) at<br>
&gt;     &gt;     src/opus_decoder.c:867<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;     #4  0x00000000004fd6b5 in kn_opus_decode (decHandle=0x712357d0,<br>
&gt;     &gt;     decProp=0x1675698, src=0x16756d0, dest=0x71245a60,<br>
&gt;     &gt;<br>
&gt;     &gt;         dstLen=0x1673210) at MSTranscodeOPUS.c:100<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;     *_And the code flow what we have observed for this specific<br>
&gt;     incident:_*<br>
&gt;     &gt;     *_<br>
&gt;     &gt;     _*<br>
&gt;     &gt;     *_Called this as mode is CELT_ONLY,_*<br>
&gt;     &gt;<br>
&gt;     &gt;        if (data!=NULL &amp;&amp; st-&gt;prev_mode &gt; 0 &amp;&amp; (<br>
&gt;     &gt;            (mode == MODE_CELT_ONLY &amp;&amp; st-&gt;prev_mode != MODE_CELT_ONLY &amp;&amp;<br>
&gt;     &gt;     !st-&gt;prev_redundancy)<br>
&gt;     &gt;         || (mode != MODE_CELT_ONLY &amp;&amp; st-&gt;prev_mode == MODE_CELT_ONLY) )<br>
&gt;     &gt;           )<br>
&gt;     &gt;        {<br>
&gt;     &gt;           _transition = 1_;<br>
&gt;     &gt;           /* Decide where to allocate the stack memory for pcm_transition */<br>
&gt;     &gt;           if (mode == MODE_CELT_ONLY)<br>
&gt;     &gt;              pcm_transition_celt_size = F5*st-&gt;channels;<br>
&gt;     &gt;           else<br>
&gt;     &gt;              pcm_transition_silk_size = F5*st-&gt;channels;<br>
&gt;     &gt;        }<br>
&gt;     &gt;<br>
&gt;     &gt;     *_So transition is made as 1 called this,_*<br>
&gt;     &gt;<br>
&gt;     &gt;        if (transition &amp;&amp; mode == MODE_CELT_ONLY)<br>
&gt;     &gt;        {<br>
&gt;     &gt;           pcm_transition = pcm_transition_celt;<br>
&gt;     &gt;           opus_decode_frame(st, NULL, 0, pcm_transition, IMIN(F5,<br>
&gt;     &gt;     audiosize), 0);<br>
&gt;     &gt;        }<br>
&gt;     &gt;<br>
&gt;     &gt;     *_In &quot;opus_decode_frame&quot; again, as data is passed as NULL, goes to<br>
&gt;     &gt;     else part_*<br>
&gt;     &gt;<br>
&gt;     &gt;        if (data != NULL)<br>
&gt;     &gt;        {<br>
&gt;     &gt;           audiosize = st-&gt;frame_size;<br>
&gt;     &gt;           mode = st-&gt;mode;<br>
&gt;     &gt;           ec_dec_init(&amp;dec,(unsigned char*)data,len);<br>
&gt;     &gt;        } else {<br>
&gt;     &gt;           audiosize = frame_size;<br>
&gt;     &gt;           mode = st-&gt;prev_mode;<br>
&gt;     &gt;<br>
&gt;     &gt;     *_As the mode is made as prev mode now, which was a silk, this<br>
&gt;     goes<br>
&gt;     &gt;     inside,_*<br>
&gt;     &gt;<br>
&gt;     &gt;       /* SILK processing */<br>
&gt;     &gt;        if (mode != MODE_CELT_ONLY)<br>
&gt;     &gt;        {<br>
&gt;     &gt;<br>
&gt;     &gt;     *_Then in this function called this_*,<br>
&gt;     &gt;<br>
&gt;     &gt;             silk_ret = silk_Decode( silk_dec, &amp;st-&gt;DecControl,<br>
&gt;     &gt;                                     lost_flag, first_frame, &amp;dec,<br>
&gt;     &gt;     pcm_ptr, &amp;silk_frame_size );<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;     *_And finally, somehow, the &quot;silk_frame_size&quot; is a negative<br>
&gt;     value (<br>
&gt;     &gt;     say -1376272 in our case), then in the same function called the<br>
&gt;     &gt;     below and this crashes here._*<br>
&gt;     &gt;<br>
&gt;     &gt;      pcm_ptr += silk_frame_size * st-&gt;channels;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;     Please help.<br>
&gt;     &gt;<br>
&gt;     &gt;     Thanks<br>
&gt;     &gt;     Suresh<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;     On 12 April 2015 at 21:23, Jean-Marc Valin &lt;<a href="mailto:jmvalin@jmvalin.ca">jmvalin@jmvalin.ca</a> &lt;mailto:<a href="mailto:jmvalin@jmvalin.ca">jmvalin@jmvalin.ca</a>&gt;<br>
</div></div><span class="">&gt;     &gt;     &lt;mailto:<a href="mailto:jmvalin@jmvalin.ca">jmvalin@jmvalin.ca</a> &lt;mailto:<a href="mailto:jmvalin@jmvalin.ca">jmvalin@jmvalin.ca</a>&gt;&gt;&gt; wrote:<br>
&gt;     &gt;<br>
&gt;     &gt;         Do you have any file that demonstrates the problem with either<br>
&gt;     &gt;         opus_demo<br>
&gt;     &gt;         or opusdec?<br>
&gt;     &gt;<br>
&gt;     &gt;                 Jean-Marc<br>
&gt;     &gt;<br>
&gt;     &gt;         On 09/04/15 04:01 AM, Suresh Thiriveedi wrote:<br>
&gt;     &gt;         &gt; Hi,<br>
&gt;     &gt;         &gt;<br>
&gt;     &gt;         &gt; I&#39;m curious to know when would be the 1.1.1 stable version<br>
&gt;     &gt;         available.<br>
&gt;     &gt;         &gt;<br>
&gt;     &gt;         &gt; In 1.1, we are facing crash when opus library is trying to<br>
&gt;     &gt;         decode the<br>
&gt;     &gt;         &gt; CELT-only, full band and 20 ms. So we tried with 1.1.1 beta<br>
&gt;     &gt;         and it looks<br>
&gt;     &gt;         &gt; to be fine. Is there any open issue regarding this in 1.1 version?<br>
&gt;     &gt;         &gt;<br>
&gt;     &gt;         &gt; Thanks<br>
&gt;     &gt;         &gt; Suresh<br>
&gt;     &gt;         &gt;<br>
&gt;     &gt;         &gt;<br>
&gt;     &gt;         &gt; _______________________________________________<br>
&gt;     &gt;         &gt; opus mailing list<br>
&gt;     &gt;         &gt; <a href="mailto:opus@xiph.org">opus@xiph.org</a> &lt;mailto:<a href="mailto:opus@xiph.org">opus@xiph.org</a>&gt;<br>
</span>&gt;     &lt;mailto:<a href="mailto:opus@xiph.org">opus@xiph.org</a> &lt;mailto:<a href="mailto:opus@xiph.org">opus@xiph.org</a>&gt;&gt;<br>
&gt;     &gt;         &gt; <a href="http://lists.xiph.org/mailman/listinfo/opus" target="_blank">http://lists.xiph.org/mailman/listinfo/opus</a><br>
&gt;     &gt;         &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;<br>
&gt;<br>
</blockquote></div><br></div></div>