summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-12-11 16:22:05 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-12-11 16:22:05 +0000
commit173b0a998d63295344cc02fb79cd26b97a431fa7 (patch)
tree74983f508007476ade811d9cc62f0891478ede5a
parent90300348dff77c26043823e3f1ce6377d3715eb4 (diff)
downloadxine-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.c12
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",