Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 171f48e2 authored by Trent Piepho's avatar Trent Piepho Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (11660): zoran: fix bug when enumerating format -1



If someone requests a format at fmt->index == (unsigned)-1 and the first
format in the array doesn't have the requested type then num will still be
-1 when it's compared to fmt->index and there will appear to be a match.

Restructure the loop so this can't happen.  It's simpler this way too.  The
unnecessary check for (unsigned)fmt->index < 0 found by Roel Kluin
<roel.kluin@gmail.com> is removed this way too.

Signed-off-by: default avatarTrent Piepho <xyzzy@speakeasy.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent cb1287a8
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -1863,23 +1863,21 @@ static int zoran_querycap(struct file *file, void *__fh, struct v4l2_capability

static int zoran_enum_fmt(struct zoran *zr, struct v4l2_fmtdesc *fmt, int flag)
{
	int num = -1, i;
	unsigned int num, i;

	for (i = 0; i < NUM_FORMATS; i++) {
		if (zoran_formats[i].flags & flag)
			num++;
		if (num == fmt->index)
			break;
	}
	if (fmt->index < 0 /* late, but not too late */  || i == NUM_FORMATS)
		return -EINVAL;

	strncpy(fmt->description, zoran_formats[i].name, sizeof(fmt->description)-1);
	for (num = i = 0; i < NUM_FORMATS; i++) {
		if (zoran_formats[i].flags & flag && num++ == fmt->index) {
			strncpy(fmt->description, zoran_formats[i].name,
				sizeof(fmt->description) - 1);
			/* fmt struct pre-zeroed, so adding '\0' not neeed */
			fmt->pixelformat = zoran_formats[i].fourcc;
			if (zoran_formats[i].flags & ZORAN_FORMAT_COMPRESSED)
				fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
			return 0;
		}
	}
	return -EINVAL;
}

static int zoran_enum_fmt_vid_cap(struct file *file, void *__fh,
					    struct v4l2_fmtdesc *f)