François Cartegnie pushed to branch 3.0.x at VideoLAN / VLC
Commits:
cb230876 by Tristan Matthews at 2026-01-07T20:57:48+01:00
speex: rtp: fix leak on decoding error
Fixes CID #1665523
(cherry picked from commit 83213a9856127707e905e403ee3688fc6cb39bd1)
- - - - -
565dca7c by Tristan Matthews at 2026-01-07T20:58:01+01:00
speex: fix leak on decoding error or EOS
Fixes CID #1665515
(cherry picked from commit 2756323fdfc5c9c2cac2429e9a9dbd2fc7d214eb)
- - - - -
9dc69e3e by Tristan Matthews at 2026-01-07T20:58:10+01:00
speex: assert against empty frame_size in header
(cherry picked from commit f25231481734e10f06f84fcc8341e402987b163b)
- - - - -
0a8dad8a by Tristan Matthews at 2026-01-07T21:03:25+01:00
speex: bail if block_(Re)Alloc failed
(cherry picked from commit 28daa76a3cbd155f45c30759d54e18bb462f84ce)
- - - - -
a316cdf2 by Tristan Matthews at 2026-01-07T21:03:28+01:00
speex: fix leak on allocation failure
Fixes CID 1666162
(cherry picked from commit defb38eabf64a0b1fdc53f7d25c74974ec7eae55)
- - - - -
f8320532 by Tristan Matthews at 2026-01-07T21:03:38+01:00
speex: cosmetic cleanup
(cherry picked from commit 250fcee5cd97f92ee8a2782abc4170c6815435b6)
- - - - -
1 changed file:
- modules/codec/speex.c
Changes:
=====================================
modules/codec/speex.c
=====================================
@@ -619,6 +619,9 @@ static block_t *ProcessPacket( decoder_t *p_dec, ogg_packet
*p_oggpacket,
/ 8;
p_new_block = block_Alloc( i_bytes_in_speex_frame );
+ if( unlikely(p_new_block == NULL) )
+ return NULL;
+
memset( p_new_block->p_buffer, 0xff, i_bytes_in_speex_frame );
/*
@@ -642,15 +645,22 @@ static block_t *ProcessPacket( decoder_t *p_dec,
ogg_packet *p_oggpacket,
if ( i_bits_after > 7 )
{
/* round-down since we rounded-up earlier (to include
- * the speex terminator code.
- */
+ * the speex terminator code.
+ */
i_bytes_in_speex_frame--;
speex_bits_write( &p_sys->bits,
(char*)p_block->p_buffer,
p_block->i_buffer - i_bytes_in_speex_frame );
+
p_block = block_Realloc( p_block,
0,
p_block->i_buffer-i_bytes_in_speex_frame );
+ if( unlikely(p_block == NULL) )
+ {
+ block_Release( p_new_block );
+ return NULL;
+ }
+
*pp_block = p_block;
}
else
@@ -663,7 +673,7 @@ static block_t *ProcessPacket( decoder_t *p_dec, ogg_packet
*p_oggpacket,
}
else
{
- return SendPacket( p_dec, p_block );
+ return SendPacket( p_dec, p_block );
}
}
else
@@ -750,6 +760,7 @@ static int DecodeRtpSpeexPacket( decoder_t *p_dec, block_t
*p_speex_bit_block )
if ( !date_Get( &p_sys->end_date ) )
date_Set( &p_sys->end_date, p_speex_bit_block->i_dts );
+ assert( p_sys->p_header->frame_size > 0 );
/*
Ask for a new audio output buffer and make sure
we get one.
@@ -759,7 +770,7 @@ static int DecodeRtpSpeexPacket( decoder_t *p_dec, block_t
*p_speex_bit_block )
else
p_aout_buffer = decoder_NewAudioBuffer( p_dec,
p_sys->p_header->frame_size );
- if ( !p_aout_buffer || p_aout_buffer->i_buffer == 0 )
+ if ( !p_aout_buffer )
{
msg_Err(p_dec, "Oops: No new buffer was returned!");
return VLCDEC_SUCCESS;
@@ -780,6 +791,7 @@ static int DecodeRtpSpeexPacket( decoder_t *p_dec, block_t
*p_speex_bit_block )
(int16_t*)p_aout_buffer->p_buffer );
if ( i_decode_ret < 0 )
{
+ block_Release( p_aout_buffer );
msg_Err( p_dec, "Decoding failed. Perhaps we have a bad stream?" );
return VLCDEC_SUCCESS;
}
@@ -835,6 +847,7 @@ static block_t *DecodePacket( decoder_t *p_dec, ogg_packet
*p_oggpacket )
case -2:
msg_Err( p_dec, "decoding error: corrupted stream?" );
case -1: /* End of stream */
+ block_Release( p_aout_buffer );
return NULL;
}
@@ -903,7 +916,6 @@ static void ParseSpeexComments( decoder_t *p_dec,
ogg_packet *p_oggpacket )
return;
}
- /* */
char *psz_mode;
if( asprintf( &psz_mode, "%s%s", p_mode->modeName, p_sys->p_header->vbr ?
" VBR" : "" ) >= 0 )
{
@@ -1164,6 +1176,9 @@ static block_t *Encode( encoder_t *p_enc, block_t
*p_aout_buf )
speex_bits_reset( &p_sys->bits );
p_block = block_Alloc( i_out );
+ if( unlikely(p_block == NULL) )
+ break;
+
memcpy( p_block->p_buffer, p_sys->p_buffer_out, i_out );
p_block->i_length = (vlc_tick_t)1000000 *
View it on GitLab:
https://code.videolan.org/videolan/vlc/-/compare/79128878ddb2c280bbb6c89c76a46b31a80ade1c...f8320532910244e7d68f4d35c50f626178861e3d
--
View it on GitLab:
https://code.videolan.org/videolan/vlc/-/compare/79128878ddb2c280bbb6c89c76a46b31a80ade1c...f8320532910244e7d68f4d35c50f626178861e3d
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits