[FFmpeg-trac] #1789(avcodec:new): Crash when reading invalid pcx file

FFmpeg trac at avcodec.org
Sun Oct 7 05:07:57 CEST 2012


#1789: Crash when reading invalid pcx file
-------------------------------------+-------------------------------------
               Reporter:  cehoyos    |                  Owner:
                   Type:  defect     |                 Status:  new
               Priority:  important  |              Component:  avcodec
                Version:  git-       |               Keywords:  pcx crash
  master                             |  SIGSEGV
             Blocked By:             |               Blocking:
Reproduced by developer:  0          |  Analyzed by developer:  0
-------------------------------------+-------------------------------------
 FFmpeg crashes when reading attached broken pcx file.
 {{{
 (gdb) r -i crash.pcx
 Starting program: ffmpeg_g -i crash.pcx
 [Thread debugging using libthread_db enabled]
 Using host libthread_db library "/lib64/libthread_db.so.1".
 ffmpeg version N-45121-gd067e25 Copyright (c) 2000-2012 the FFmpeg
 developers
   built on Oct  7 2012 04:47:57 with gcc 4.7 (SUSE Linux)
   configuration: --enable-gpl
   libavutil      51. 73.102 / 51. 73.102
   libavcodec     54. 64.100 / 54. 64.100
   libavformat    54. 29.105 / 54. 29.105
   libavdevice    54.  3.100 / 54.  3.100
   libavfilter     3. 19.102 /  3. 19.102
   libswscale      2.  1.101 /  2.  1.101
   libswresample   0. 16.100 /  0. 16.100
   libpostproc    52.  1.100 / 52.  1.100

 Program received signal SIGSEGV, Segmentation fault.
 pcx_rle_decode (compressed=1, bytes_per_scanline=768, dst=0x15a2280 "",
 src=<optimized out>) at libavcodec/pcx.c:54
 54                  value = *src++;
 (gdb) bt
 #0  pcx_rle_decode (compressed=1, bytes_per_scanline=768, dst=0x15a2280
 "", src=<optimized out>) at libavcodec/pcx.c:54
 #1  pcx_decode_frame (avctx=0x15a8ac0, data=0x159ff40,
 data_size=0x7fffffffc02c, avpkt=<optimized out>)
     at libavcodec/pcx.c:166
 #2  0x000000000098a75e in avcodec_decode_video2 (avctx=0x159fb00,
 picture=0x159ff40,
     got_picture_ptr=got_picture_ptr at entry=0x7fffffffc02c,
 avpkt=avpkt at entry=0x7fffffffc060) at libavcodec/utils.c:1570
 #3  0x00000000005891e4 in try_decode_frame (st=st at entry=0x1599d40,
 avpkt=avpkt at entry=0x15a07e0, options=0x15a01a0)
     at libavformat/utils.c:2364
 #4  0x000000000058fc7e in avformat_find_stream_info (ic=0x1599280,
 options=0x15a01a0) at libavformat/utils.c:2740
 #5  0x0000000000455b99 in opt_input_file (optctx=<optimized out>,
 opt=<optimized out>, filename=<optimized out>)
     at ffmpeg_opt.c:780
 #6  0x00000000004630a0 in parse_option
 (optctx=optctx at entry=0x7fffffffcaf0, opt=0x7fffffffe2f2 "i",
     arg=0x7fffffffe2f4 "crash.pcx", options=options at entry=0xbb44a0
 <options>) at cmdutils.c:320
 #7  0x0000000000463478 in parse_options
 (optctx=optctx at entry=0x7fffffffcaf0, argc=argc at entry=3,
     argv=argv at entry=0x7fffffffde78, options=0xbb44a0 <options>,
 parse_arg_function=0x456820 <opt_output_file>)
     at cmdutils.c:353
 #8  0x000000000044f7c0 in main (argc=3, argv=0x7fffffffde78) at
 ffmpeg.c:3151
 (gdb) disass $pc-32,$pc+32
 Dump of assembler code from 0x8d5f80 to 0x8d5fc0:
    0x00000000008d5f80 <pcx_decode_frame+608>:   rex.WR sub
 $0xffffffffc9314500,%rax
    0x00000000008d5f86 <pcx_decode_frame+614>:   nopw
 %cs:0x0(%rax,%rax,1)
    0x00000000008d5f90 <pcx_decode_frame+624>:   test   %r8d,%r8d
    0x00000000008d5f93 <pcx_decode_frame+627>:   je     0x8d61d4
 <pcx_decode_frame+1204>
    0x00000000008d5f99 <pcx_decode_frame+633>:   test   %ebp,%ebp
    0x00000000008d5f9b <pcx_decode_frame+635>:   je     0x8d5fe1
 <pcx_decode_frame+705>
    0x00000000008d5f9d <pcx_decode_frame+637>:   xor    %edx,%edx
    0x00000000008d5f9f <pcx_decode_frame+639>:   nop
 => 0x00000000008d5fa0 <pcx_decode_frame+640>:   movzbl (%r12),%esi
    0x00000000008d5fa5 <pcx_decode_frame+645>:   cmp    $0xbf,%sil
    0x00000000008d5fa9 <pcx_decode_frame+649>:   ja     0x8d61c0
 <pcx_decode_frame+1184>
    0x00000000008d5faf <pcx_decode_frame+655>:   add    $0x1,%r12
    0x00000000008d5fb3 <pcx_decode_frame+659>:   mov    $0x1,%eax
    0x00000000008d5fb8 <pcx_decode_frame+664>:   cmp    %edx,%ebp
    0x00000000008d5fba <pcx_decode_frame+666>:   jbe    0x8d5fe1
 <pcx_decode_frame+705>
    0x00000000008d5fbc <pcx_decode_frame+668>:   test   %al,%al
    0x00000000008d5fbe <pcx_decode_frame+670>:   lea    -0x1(%rax),%edi
 End of assembler dump.
 (gdb) info register
 rax            0x263    611
 rbx            0x15a2280        22684288
 rcx            0x200    512
 rdx            0x263    611
 rsi            0x0      0
 rdi            0x263    611
 rbp            0x300    0x300
 rsp            0x7fffffffbed0   0x7fffffffbed0
 r8             0x1      1
 r9             0xf4     244
 r10            0x0      0
 r11            0x360    864
 r12            0x15d9000        22908928
 r13            0x100    256
 r14            0x7ffff7fbd7c0   140737353865152
 r15            0x100    256
 rip            0x8d5fa0 0x8d5fa0 <pcx_decode_frame+640>
 eflags         0x10246  [ PF ZF IF RF ]
 cs             0x33     51
 ss             0x2b     43
 ds             0x0      0
 es             0x0      0
 fs             0x0      0
 gs             0x0      0
 }}}

-- 
Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/1789>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list