diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-12-11 16:22:05 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-12-11 16:22:05 +0000 |
commit | 173b0a998d63295344cc02fb79cd26b97a431fa7 (patch) | |
tree | 74983f508007476ade811d9cc62f0891478ede5a | |
parent | 90300348dff77c26043823e3f1ce6377d3715eb4 (diff) | |
download | xine-lib-173b0a998d63295344cc02fb79cd26b97a431fa7.tar.gz xine-lib-173b0a998d63295344cc02fb79cd26b97a431fa7.tar.bz2 |
fix interpolation bounds. previously it could cause buffer overrun (and segfault)
if out_samples were bigger than 2*in_samples.
CVS patchset: 3483
CVS date: 2002/12/11 16:22:05
-rw-r--r-- | src/xine-engine/resample.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/xine-engine/resample.c b/src/xine-engine/resample.c index 6ae8d7b25..d7f0dec90 100644 --- a/src/xine-engine/resample.c +++ b/src/xine-engine/resample.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: resample.c,v 1.4 2002/10/23 17:12:34 guenter Exp $ + * $Id: resample.c,v 1.5 2002/12/11 16:22:05 miguelfreitas Exp $ */ #ifdef HAVE_CONFIG_H @@ -34,7 +34,7 @@ void audio_out_resample_mono(int16_t* input_samples, uint32_t in_samples, int osample; /* 16+16 fixed point math */ uint32_t isample = 0; - uint32_t istep = (in_samples << 16)/out_samples; + uint32_t istep = ((in_samples-2) << 16)/(out_samples-2); #ifdef VERBOSE printf ("Audio : resample %d samples to %d\n", @@ -65,7 +65,7 @@ void audio_out_resample_stereo(int16_t* input_samples, uint32_t in_samples, int osample; /* 16+16 fixed point math */ uint32_t isample = 0; - uint32_t istep = (in_samples << 16)/out_samples; + uint32_t istep = ((in_samples-2) << 16)/(out_samples-2); #ifdef VERBOSE printf ("Audio : resample %d samples to %d\n", @@ -103,7 +103,7 @@ void audio_out_resample_4channel(int16_t* input_samples, uint32_t in_samples, int osample; /* 16+16 fixed point math */ uint32_t isample = 0; - uint32_t istep = (in_samples << 16)/out_samples; + uint32_t istep = ((in_samples-2) << 16)/(out_samples-2); #ifdef VERBOSE printf ("Audio : resample %d samples to %d\n", @@ -157,7 +157,7 @@ void audio_out_resample_5channel(int16_t* input_samples, uint32_t in_samples, int osample; /* 16+16 fixed point math */ uint32_t isample = 0; - uint32_t istep = (in_samples << 16)/out_samples; + uint32_t istep = ((in_samples-2) << 16)/(out_samples-2); #ifdef VERBOSE printf ("Audio : resample %d samples to %d\n", @@ -218,7 +218,7 @@ void audio_out_resample_6channel(int16_t* input_samples, uint32_t in_samples, int osample; /* 16+16 fixed point math */ uint32_t isample = 0; - uint32_t istep = (in_samples << 16)/out_samples; + uint32_t istep = ((in_samples-2) << 16)/(out_samples-2); #ifdef VERBOSE printf ("Audio : resample %d samples to %d\n", |