[FFmpeg-devel] [PATCH] libavdevice/v4l2: fix of crash caused by assert
Giorgio Vazzana
mywing81 at gmail.com
Mon Sep 1 23:00:14 CEST 2014
2014-09-01 22:46 GMT+02:00 Reimar Döffinger <Reimar.Doeffinger at gmx.de>:
> On Mon, Sep 01, 2014 at 10:33:15PM +0200, Giorgio Vazzana wrote:
>> +static int enqueue_buffer(struct video_data *s, struct v4l2_buffer *buf)
>> +{
>> + int res = 0;
>> +
>> + if (v4l2_ioctl(s->fd, VIDIOC_QBUF, buf) < 0) {
>> + res = AVERROR(errno);
>> + av_log(NULL, AV_LOG_ERROR, "ioctl(VIDIOC_QBUF): %s\n", av_err2str(res));
>> + } else {
>> + avpriv_atomic_int_add_and_fetch(&s->buffers_queued, 1);
>> + }
>> +
>> + return res;
>
> Nit: I'd prefer something simpler that avoids cluttering the normal path
> because of error handling like:
>
>> + if (v4l2_ioctl(s->fd, VIDIOC_QBUF, buf) < 0) {
>> + av_log(NULL, AV_LOG_ERROR, "ioctl(VIDIOC_QBUF): %s\n", av_err2str(res));
>> + return AVERROR(errno);
If we call av_log(), errno is not guaranteed to be the same after the
call. Also, av_err2str() needs AVERROR(errno).
>> + }
>> + avpriv_atomic_int_add_and_fetch(&s->buffers_queued, 1);
>> + return 0;
>
>
>
>
>> static void mmap_release_buffer(void *opaque, uint8_t *data)
>
> I haven't checked, but I suspect this function could be made simpler
> and more likely to not re-introduce these bugs by using for the
> error paths goto.
> Admittedly that doesn't belong in this patch anyway though.
OK, we'll fix this in another patch then.
More information about the ffmpeg-devel
mailing list