MestreLion/wavegain

Floating Point Exception

Closed this issue · 0 comments

Tested in Ubuntu 16.04, 64bit

I use the following command with the file:

./wavegain wavegain_floting_point_exception.wav

and get:

Floating point exception

I use gdb to analysis the bug and get the below information:

gdb-peda$ set args wavegain_floting_point_exception.wav
gdb-peda$ r
Starting program: wavegain wavegain_floting_point_exception.wav
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGFPE, Arithmetic exception.

[----------------------------------registers-----------------------------------]
RAX: 0x5e00e84b 
RBX: 0x7fffffffd4e0 --> 0x7fffffffd700 --> 0x7fffffffd9b0 --> 0x0 
RCX: 0x60c00000bf00 --> 0x0 
RDX: 0x0 
RSI: 0x3 
RDI: 0x0 
RBP: 0x7fffffffd500 --> 0x7fffffffd540 --> 0x7fffffffd630 --> 0x7fffffffd720 --> 0x7fffffffd9d0 --> 0x4197d0 (<__libc_csu_init>:	push   r15)
RSP: 0x7fffffffd340 --> 0xc00000002 --> 0x0 
RIP: 0x40a5cc (<wav_open+3809>:	idiv   rdi)
R8 : 0x61600000fd60 --> 0x0 
R9 : 0x7fffffffd2d0 --> 0x5e00e84b61746164 
R10: 0x7ffff7fc5780 (0x00007ffff7fc5780)
R11: 0x7ffff692bf90 --> 0xfffda370fffda09f 
R12: 0xffffffffa70 --> 0x0 
R13: 0x7fffffffd380 --> 0x41b58ab3 
R14: 0x7fffffffd380 --> 0x41b58ab3 
R15: 0x0
EFLAGS: 0x10206 (carry PARITY adjust zero sign trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
   0x40a5c0 <wav_open+3797>:	imul   edx,DWORD PTR [rbp-0x19c]
   0x40a5c7 <wav_open+3804>:	movsxd rdi,edx
   0x40a5ca <wav_open+3807>:	cqo    
=> 0x40a5cc <wav_open+3809>:	idiv   rdi
   0x40a5cf <wav_open+3812>:	mov    rcx,rax
   0x40a5d2 <wav_open+3815>:	mov    rax,QWORD PTR [rbp-0x1b0]
   0x40a5d9 <wav_open+3822>:	add    rax,0x10
   0x40a5dd <wav_open+3826>:	mov    rdx,rax
[------------------------------------stack-------------------------------------]
0000| 0x7fffffffd340 --> 0xc00000002 --> 0x0 
0008| 0x7fffffffd348 --> 0x60200000eff0 --> 0xff042546464952 
0016| 0x7fffffffd350 --> 0x60c00000bf80 --> 0x40a8be (<wav_read>:	push   rbp)
0024| 0x7fffffffd358 --> 0x61600000fc80 --> 0xbebebebefbad2488 
0032| 0x7fffffffd360 --> 0x100000000 --> 0x0 
0040| 0x7fffffffd368 --> 0x60400000dfd0 --> 0xbebebebe00080000 
0048| 0x7fffffffd370 --> 0x24 ('$')
0056| 0x7fffffffd378 --> 0x0 
[------------------------------------------------------------------------------]
Legend: code, data, rodata, value
Stopped reason: SIGFPE
0x000000000040a5cc in wav_open (in=0x61600000fc80, opt=0x60c00000bf80, oldbuf=0x60200000eff0 "RIFF%\004\377", buflen=0xc) at audio.c:790
790				opt->total_samples_per_channel = len/(format.channels*samplesize);
gdb-peda$ bt
#0  0x000000000040a5cc in wav_open (in=0x61600000fc80, opt=0x60c00000bf80, oldbuf=0x60200000eff0 "RIFF%\004\377", buflen=0xc) at audio.c:790
#1  0x0000000000407833 in open_audio_file (in=0x61600000fc80, opt=0x60c00000bf80) at audio.c:362
#2  0x0000000000414ded in get_gain (filename=0x60700000df40 "wavegain_floting_point_exception.wav", track_peak=0x60600000efd8, track_gain=0x60600000efd0, dc_offset=0x60600000efe0, 
    offset=0x60600000eff0, settings=0x7fffffffd8f0) at wavegain.c:181
#3  0x000000000041198d in process_files (file_list=0x60600000efc0, settings=0x7fffffffd8f0, dir=0x41f1a0 ".") at main.c:197
#4  0x000000000041453f in main (argc=0x2, argv=0x7fffffffdab8) at main.c:729
#5  0x00007ffff67b7830 in __libc_start_main (main=0x4139ca <main>, argc=0x2, argv=0x7fffffffdab8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffdaa8)
    at ../csu/libc-start.c:291
#6  0x0000000000401ce9 in _start ()