From bc383a92da16d509e30a656e5f9825008e6779c7 Mon Sep 17 00:00:00 2001 From: Laurence Withers Date: Fri, 15 Apr 2011 17:55:53 +0000 Subject: [PATCH] iir_filter_copy(): don't copy uninitialised state If iir_filter_copy() was called on a filter which had no state, it would copy the uninitialised memory from that filter. Check for this. --- src/libiir/200_iir.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libiir/200_iir.c b/src/libiir/200_iir.c index a730171..d311b67 100644 --- a/src/libiir/200_iir.c +++ b/src/libiir/200_iir.c @@ -149,7 +149,8 @@ iir_filter_chain(struct iir_filter_t* fi, const struct iir_coeff_t* coeff) /* iir_filter_copy() * Performs a deep copy of a filter instance chain. */ -struct iir_filter_t* iir_filter_copy(const struct iir_filter_t* fi, int state) +struct iir_filter_t* +iir_filter_copy(const struct iir_filter_t* fi, int state) { struct iir_filter_t* head = 0, * tail = 0, * copy; @@ -165,7 +166,7 @@ struct iir_filter_t* iir_filter_copy(const struct iir_filter_t* fi, int state) memcpy(copy->c, fi->c, sizeof(double) * fi->nc); memcpy(copy->d, fi->d, sizeof(double) * fi->nd); - if(state) { + if(state && fi->ready) { copy->ready = 1; memcpy(copy->x, fi->x, sizeof(double) * fi->nc); memcpy(copy->y, fi->y, sizeof(double) * fi->nd);