[Ffmpeg-devel] ffmpeg segfault

Vidar Madsen vidarino
Thu Jul 14 13:59:13 CEST 2005


Hi.

I'm getting a consistent segfault when trying to convert an AMR file
to MP3 (or any other output format, for that matter):

$ ffmpeg -y -i atlantis.amr x.mp3
ffmpeg version 0.4.9-pre1, build 4757, Copyright (c) 2000-2004 Fabrice Bellard
  configuration:  --enable-a53 --enable-pthreads --enable-gpl
--enable-mp3lame --enable-amr_nb-fixed --enable-amr_nb --enable-amr_wb
  built on Jul 14 2005 13:44:32, gcc: 3.3.5
Input #0, amr, from 'atlantis.amr':
  Duration: N/A, bitrate: N/A
  Stream #0.0: Audio: amr_nb, 8000 Hz, mono
Output #0, mp3, to 'x.mp3':
  Stream #0.0: Audio: mp3, 8000 Hz, mono, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
Press [q] to stop encoding
Segmentation fault

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 16384 (LWP 2777)]
amr_nb_decode_frame (avctx=0xbfffeebc, data=0x83ad2d0,
data_size=0xbfffeebc, buf=0x0, buf_size=0) at amr.c:234
234             toc=amrData[offset];
(gdb) bt
#0  amr_nb_decode_frame (avctx=0xbfffeebc, data=0x83ad2d0,
data_size=0xbfffeebc, buf=0x0, buf_size=0)
    at amr.c:234
#1  0x080a252a in avcodec_decode_audio (avctx=0x83a3b18,
samples=0x402e7008, frame_size_ptr=0xbfffeebc,
    buf=0x0, buf_size=0) at utils.c:645
#2  0x0805d28e in output_packet (ist=0x83ad2d0, ist_index=0,
ost_table=0x83ad320, nb_ostreams=1, pkt=0x0)
    at ffmpeg.c:1229
#3  0x0805e162 in av_encode (output_files=0x8336d40,
nb_output_files=1, input_files=0x8336c40,
    nb_input_files=1, stream_maps=0x8336da0, nb_stream_maps=0) at ffmpeg.c:2101
#4  0x08063133 in main (argc=10000, argv=0xbffff644) at ffmpeg.c:4485

This happens as soon as the file reaches EOF, which means
avcodec_decode_audio is called with zero buf and buf_size.

A quick glance thought the code seems to indicate that
amr_nb_decode_frame doesn't check if its supplied buffer ("buf") is
NULL before accessing it:

    uint8_t*amrData=buf;
    int offset=0;
    [...]
        toc=amrData[offset];

I guess the fix should be trivial, but I don't have time to dig deeper
right now. Nor am I sure if just retuning early if(!buf) is the
correct solution. Anyone?

Vidar





More information about the ffmpeg-devel mailing list