mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 03:20:57 +00:00
res/res_rtp_asterisk.c: Fixing possible divide by zero
Currently, when the Asterisk calculates rtp statistics, it uses sample_count as a unsigned integer parameter. This would be fine for most of cases, but in case of large enough number of sample_count, this might be causing the divide by zero error. ASTERISK-28321 Change-Id: If7e0629abaceddd2166eb012456c53033ea26249
This commit is contained in:
committed by
Joshua C. Colp
parent
255e374254
commit
ca8f254f0f
@@ -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 );
|
||||
|
Reference in New Issue
Block a user