[Libav-user] invalid memory accesses when decoding mp3 streams
Leontie Eugen
e_leontie at yahoo.com
Wed Jul 27 18:30:43 CEST 2011
I am writing a multithreaded stream decoding application and testing in valgrind
to check for leaks and such and
I noticed the following invalid reads (see below). Since the errors are not
frequent and I do not have a pattern to easily reproduce, it is hard to further
debug this.
The streams themselves may be corrupted but I would expect that should not
break ffmpeg.
Is there any way to validate for valid frames received with av_read_frame before
passing them to avcodec_decode_audio3 ( I am checking the return value of
read_frame, but that does not ensure a valid frame is in there ) ?
I am following the avcodec_decode_audio3 warnings ( like allocating
extra FF_INPUT_BUFFER_PADDING_SIZE, alignments and such), although I am not sure
how can I satisfy this one : "The end of the input buffer avpkt->data should be
set to 0 to ensure that no overreading happens for damaged MPEG streams" (my
packets are retrieved by av_read_frame) ...
Any recommendations ?
Thread 14:
==00:01:46:59.325 14351== Invalid read of size 4
==00:01:46:59.325 14351== at 0x8341E35: get_bits (get_bits.h:285)
==00:01:46:59.325 14351== by 0x8341C6C: mp_decode_layer1 (mpegaudiodec.c:683)
==00:01:46:59.325 14351== by 0x8345876: mp_decode_frame (mpegaudiodec.c:1715)
==00:01:46:59.325 14351== by 0x8345DDF: decode_frame (mpegaudiodec.c:1816)
==00:01:46:59.325 14351== Address 0x4464973 is 339 bytes inside a block of size
342 alloc'd
==00:01:46:59.325 14351== at 0x4005046: memalign (vg_replace_malloc.c:581)
==00:01:46:59.325 14351== by 0x40050A0: posix_memalign
(vg_replace_malloc.c:709)
==00:01:46:59.325 14351== by 0x858CF0B: av_malloc (mem.c:90)
==00:01:46:59.325 14351== by 0x819BD1D: av_dup_packet (avpacket.c:130)
==00:01:46:59.324 14351== Thread 10:
==00:01:46:59.324 14351== Invalid read of size 4
==00:01:46:59.324 14351== at 0x8341E35: get_bits (get_bits.h:285)
==00:01:46:59.324 14351== by 0x8342407: mp_decode_layer2 (mpegaudiodec.c:806)
==00:01:46:59.324 14351== by 0x8345899: mp_decode_frame (mpegaudiodec.c:1719)
==00:01:46:59.324 14351== by 0x8345DDF: decode_frame (mpegaudiodec.c:1816)
==00:01:46:59.324 14351== Address 0x42a0bbb is 3 bytes after a block of size
248 alloc'd
==00:01:46:59.324 14351== at 0x4005046: memalign (vg_replace_malloc.c:581)
==00:01:46:59.325 14351== by 0x40050A0: posix_memalign
(vg_replace_malloc.c:709)
==00:01:46:59.325 14351== by 0x858CF0B: av_malloc (mem.c:90)
==00:01:46:59.325 14351== by 0x819BD1D: av_dup_packet (avpacket.c:130)
More information about the Libav-user
mailing list