Earlier versions of the codec_opus samples_count callback can return
negative error values on undecodable frames. This resulted in a divide by
zero exception.
* Added a defensive check in ast_codec_samples_count() for a "negative"
samples count return value. Log the event and set the count to zero.
ASTERISK-27194
Change-Id: Icf69350307ecbbc80a3d74de46af9bd80ea17819
if (codec->samples_count) {
samples = codec->samples_count(frame);
+ if ((int) samples < 0) {
+ ast_log(LOG_WARNING, "Codec %s returned invalid number of samples.\n",
+ ast_format_get_name(frame->subclass.format));
+ samples = 0;
+ }
} else {
ast_log(LOG_WARNING, "Unable to calculate samples for codec %s\n",
ast_format_get_name(frame->subclass.format));