Skip to content
Snippets Groups Projects

mux: mpeg: fix overflow handling

Merged Alaric Senat requested to merge asenat/vlc:mpeg-bits-overflow into master
+ 12
3
@@ -21,6 +21,8 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include <limits.h>
#include <stdbit.h>
#include <stdint.h>
#include <stdlib.h>
@@ -55,15 +57,22 @@ static inline void bits_align( bits_buffer_t *p_buffer )
if( p_buffer->i_mask != 0x80 && p_buffer->i_data < p_buffer->i_size )
{
p_buffer->i_mask = 0x80;
p_buffer->i_data++;
p_buffer->p_data[p_buffer->i_data] = 0x00;
if( ++p_buffer->i_data < p_buffer->i_size )
p_buffer->p_data[p_buffer->i_data] = 0x00;
}
}
static inline bool bits_will_overflow( const bits_buffer_t *buff, int count )
{
const int leftover = count - (stdc_trailing_zeros(buff->i_mask) + 1);
const int byte_shift = (leftover + CHAR_BIT - 1) / CHAR_BIT;
return buff->i_data + byte_shift >= buff->i_size;
}
static inline void bits_write( bits_buffer_t *p_buffer,
int i_count, uint64_t i_bits )
{
if (p_buffer->i_data + i_count < p_buffer->i_size)
if( bits_will_overflow(p_buffer, i_count) )
return;
while( i_count > 0 )
Loading