diff mbox

[v2,1/1] v4l: libv4l2subdev: Precisely convert media bus string to code

Message ID 1453725306-4047-1-git-send-email-sakari.ailus@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sakari Ailus Jan. 25, 2016, 12:35 p.m. UTC
Any character beyond the fist `length' characters in the mbus_formats
strings are ignored, causing incorrect matches if the format entry starts
with but isn't equal to the passed format.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
since v1:
- Use mbus_formats[i].name[length] == '\0' instead of comparing strlen()
  result.

 utils/media-ctl/libv4l2subdev.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

Comments

Laurent Pinchart Jan. 25, 2016, 7:41 p.m. UTC | #1
Hi Sakari,

Thank you for the patch.

On Monday 25 January 2016 14:35:06 Sakari Ailus wrote:
> Any character beyond the fist `length' characters in the mbus_formats
> strings are ignored, causing incorrect matches if the format entry starts
> with but isn't equal to the passed format.
> 
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
> since v1:
> - Use mbus_formats[i].name[length] == '\0' instead of comparing strlen()
>   result.
> 
>  utils/media-ctl/libv4l2subdev.c | 10 ++++------
>  1 file changed, 4 insertions(+), 6 deletions(-)
> 
> diff --git a/utils/media-ctl/libv4l2subdev.c
> b/utils/media-ctl/libv4l2subdev.c index 33c1ee6..dc2cd87 100644
> --- a/utils/media-ctl/libv4l2subdev.c
> +++ b/utils/media-ctl/libv4l2subdev.c
> @@ -769,14 +769,12 @@ enum v4l2_mbus_pixelcode
> v4l2_subdev_string_to_pixelcode(const char *string, unsigned int i;
> 
>  	for (i = 0; i < ARRAY_SIZE(mbus_formats); ++i) {
> -		if (strncmp(mbus_formats[i].name, string, length) == 0)
> -			break;
> +		if (strncmp(mbus_formats[i].name, string, length) == 0
> +		    && mbus_formats[i].name[length] == '\0')
> +			return mbus_formats[i].code;
>  	}
> 
> -	if (i == ARRAY_SIZE(mbus_formats))
> -		return (enum v4l2_mbus_pixelcode)-1;
> -
> -	return mbus_formats[i].code;
> +	return (enum v4l2_mbus_pixelcode)-1;
>  }
> 
>  static struct {
diff mbox

Patch

diff --git a/utils/media-ctl/libv4l2subdev.c b/utils/media-ctl/libv4l2subdev.c
index 33c1ee6..dc2cd87 100644
--- a/utils/media-ctl/libv4l2subdev.c
+++ b/utils/media-ctl/libv4l2subdev.c
@@ -769,14 +769,12 @@  enum v4l2_mbus_pixelcode v4l2_subdev_string_to_pixelcode(const char *string,
 	unsigned int i;
 
 	for (i = 0; i < ARRAY_SIZE(mbus_formats); ++i) {
-		if (strncmp(mbus_formats[i].name, string, length) == 0)
-			break;
+		if (strncmp(mbus_formats[i].name, string, length) == 0
+		    && mbus_formats[i].name[length] == '\0')
+			return mbus_formats[i].code;
 	}
 
-	if (i == ARRAY_SIZE(mbus_formats))
-		return (enum v4l2_mbus_pixelcode)-1;
-
-	return mbus_formats[i].code;
+	return (enum v4l2_mbus_pixelcode)-1;
 }
 
 static struct {