avvidenc: guard against division by zero

and other nonsensical time base values while we're at it.

Coverity 1139699
This commit is contained in:
Vincent Penquerc'h 2014-04-30 15:59:04 +01:00
parent 6d92f18d1b
commit 3529de1784

View file

@ -381,6 +381,11 @@ gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder,
/* fetch pix_fmt, fps, par, width, height... */ /* fetch pix_fmt, fps, par, width, height... */
gst_ffmpeg_videoinfo_to_context (&state->info, ffmpegenc->context); gst_ffmpeg_videoinfo_to_context (&state->info, ffmpegenc->context);
/* sanitize time base */
if (ffmpegenc->context->time_base.num <= 0
|| ffmpegenc->context->time_base.den <= 0)
goto insane_timebase;
if ((oclass->in_plugin->id == AV_CODEC_ID_MPEG4) if ((oclass->in_plugin->id == AV_CODEC_ID_MPEG4)
&& (ffmpegenc->context->time_base.den > 65535)) { && (ffmpegenc->context->time_base.den > 65535)) {
/* MPEG4 Standards do not support time_base denominator greater than /* MPEG4 Standards do not support time_base denominator greater than
@ -529,6 +534,13 @@ unsupported_codec:
GST_DEBUG ("Unsupported codec - no caps found"); GST_DEBUG ("Unsupported codec - no caps found");
return FALSE; return FALSE;
} }
insane_timebase:
{
GST_ERROR_OBJECT (ffmpegenc, "Rejecting time base %d/%d",
ffmpegenc->context->time_base.den, ffmpegenc->context->time_base.num);
return FALSE;
}
} }