diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 84b2088455417c9ec433e69dbe069403369003fb..6a5fb0a15964fa54596713e00cb60b1982f72d19 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -3075,6 +3075,14 @@ static double normdev_compute(double normdev, double sample, unsigned int sample normdev = normdev * sample_count + sample; sample_count++; + /* + It's possible the sample_count hits the maximum value and back to 0. + Set to 1 to prevent the divide by zero crash if the sample_count is 0. + */ + if (sample_count == 0) { + sample_count = 1; + } + return normdev / sample_count; } @@ -3091,6 +3099,14 @@ static double stddev_compute(double stddev, double sample, double normdev, doubl stddev = sample_count * stddev; sample_count++; + /* + It's possible the sample_count hits the maximum value and back to 0. + Set to 1 to prevent the divide by zero crash if the sample_count is 0. + */ + if (sample_count == 0) { + sample_count = 1; + } + return stddev + ( sample_count * SQUARE( (sample - normdev) / sample_count ) ) + ( SQUARE(sample - normdev_curent) / sample_count );