shithub: libsamplerate

Download patch

ref: f4e2bc3ff0229f9563261f8294205aac3ba66a8d
parent: a25ac789c019b25870bcf20d35498f95ad610336
author: Erik de Castro Lopo <[email protected]>
date: Mon Aug 27 15:31:18 EDT 2012

src/src_*.c : Validate internally stashed src_ratio value.

--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,9 @@
     Add SRC_ERR_BAD_INTERNAL_STATE error number and string.
     Move function is_bad_src_ratio() to common.h.
 
+    * src/src_linear.c src/src_sinc.c src/src_zoh.c
+    Validate internally stashed src_ratio value.
+
 2012-08-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
 
     * tests/multi_channel_test.c tests/snr_bw_test.c tests/varispeed_test.c
--- a/src/src_linear.c
+++ b/src/src_linear.c
@@ -1,5 +1,5 @@
 /*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 2002-2012 Erik de Castro Lopo <[email protected]>
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -78,6 +78,10 @@
 	priv->in_used = priv->out_gen = 0 ;
 
 	src_ratio = psrc->last_ratio ;
+
+	if (is_bad_src_ratio (src_ratio))
+		return SRC_ERR_BAD_INTERNAL_STATE ;
+
 	input_index = psrc->last_position ;
 
 	/* Calculate samples before first sample in input array. */
--- a/src/src_sinc.c
+++ b/src/src_sinc.c
@@ -347,6 +347,9 @@
 
 	src_ratio = psrc->last_ratio ;
 
+	if (is_bad_src_ratio (src_ratio))
+		return SRC_ERR_BAD_INTERNAL_STATE ;
+
 	/* Check the sample rate ratio wrt the buffer len. */
 	count = (filter->coeff_half_len + 2.0) / filter->index_inc ;
 	if (MIN (psrc->last_ratio, data->src_ratio) < 1.0)
@@ -493,6 +496,9 @@
 
 	src_ratio = psrc->last_ratio ;
 
+	if (is_bad_src_ratio (src_ratio))
+		return SRC_ERR_BAD_INTERNAL_STATE ;
+
 	/* Check the sample rate ratio wrt the buffer len. */
 	count = (filter->coeff_half_len + 2.0) / filter->index_inc ;
 	if (MIN (psrc->last_ratio, data->src_ratio) < 1.0)
@@ -644,6 +650,9 @@
 
 	src_ratio = psrc->last_ratio ;
 
+	if (is_bad_src_ratio (src_ratio))
+		return SRC_ERR_BAD_INTERNAL_STATE ;
+
 	/* Check the sample rate ratio wrt the buffer len. */
 	count = (filter->coeff_half_len + 2.0) / filter->index_inc ;
 	if (MIN (psrc->last_ratio, data->src_ratio) < 1.0)
@@ -801,6 +810,9 @@
 
 	src_ratio = psrc->last_ratio ;
 
+	if (is_bad_src_ratio (src_ratio))
+		return SRC_ERR_BAD_INTERNAL_STATE ;
+
 	/* Check the sample rate ratio wrt the buffer len. */
 	count = (filter->coeff_half_len + 2.0) / filter->index_inc ;
 	if (MIN (psrc->last_ratio, data->src_ratio) < 1.0)
@@ -1044,6 +1056,9 @@
 	filter->in_used = filter->out_gen = 0 ;
 
 	src_ratio = psrc->last_ratio ;
+
+	if (is_bad_src_ratio (src_ratio))
+		return SRC_ERR_BAD_INTERNAL_STATE ;
 
 	/* Check the sample rate ratio wrt the buffer len. */
 	count = (filter->coeff_half_len + 2.0) / filter->index_inc ;
--- a/src/src_zoh.c
+++ b/src/src_zoh.c
@@ -1,5 +1,5 @@
 /*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 2002-2012 Erik de Castro Lopo <[email protected]>
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -76,6 +76,10 @@
 	priv->in_used = priv->out_gen = 0 ;
 
 	src_ratio = psrc->last_ratio ;
+
+	if (is_bad_src_ratio (src_ratio))
+		return SRC_ERR_BAD_INTERNAL_STATE ;
+
 	input_index = psrc->last_position ;
 
 	/* Calculate samples before first sample in input array. */