From: SourceForge.net <no...@so...> - 2012-12-04 18:12:27
|
Bugs item #3592482, was opened at 2012-12-04 10:12 Message generated for change (Tracker Item Submitted) made by tschmula You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110706&aid=3592482&group_id=10706 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: MrMod (tschmula) Assigned to: Nobody/Anonymous (nobody) Summary: Bug in rate effect Initial Comment: Sox hangs when the rate effect causes the number of samples to go past 2^31. To reproduce: Sox -V -S -r 48000 -b 24 -n -n synth 3:10:00 pinknoise rate 96000 rate 192000 I located the problem in rate_flush function in rate.c. The 'size_t remaining' variable is cast improperly to (int), which doesn't work at the 2^31 boundary for integers. To fix, simply change the if statement from: if ((int)remaining > 0) { to if(samples_out > p->samples_out) { Here is a patch file with the fix: diff -cr sox-14.4.0/src/rate.c sox-14.4.0/src-update/rate.c *** sox-14.4.0/src/rate.c Tue Dec 27 22:15:32 2011 --- sox-14.4.0/src-update/rate.c Tue Dec 4 11:04:47 2012 *************** *** 397,403 **** size_t remaining = samples_out - p->samples_out; sample_t * buff = calloc(1024, sizeof(*buff)); ! if ((int)remaining > 0) { while ((size_t)fifo_occupancy(fifo) < remaining) { rate_input(p, buff, (size_t) 1024); rate_process(p); --- 397,403 ---- size_t remaining = samples_out - p->samples_out; sample_t * buff = calloc(1024, sizeof(*buff)); ! if (samples_out > p->samples_out) { while ((size_t)fifo_occupancy(fifo) < remaining) { rate_input(p, buff, (size_t) 1024); rate_process(p); Sincerely, MrMod ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110706&aid=3592482&group_id=10706 |