qdev-property: Make bit property parsing stricter
PATCH 1/1 qdev-property: Make bit property parsing stricter
By using strncasecmp, we allow for arbitrary characters after the "on"/"off" string. Fix this by switching to strcasecmp.
--- hw/qdev-properties.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
hw/qdev-properties.c +2 -2
@@ -40,9 +40,9 @@ static void qdev_prop_cpy(DeviceState *dev, Property *props, void *src)/* Bit */ static int parse_bit (DeviceState *dev,Property *prop,const char *str) { -if (!strncasecmp (str,"on" ,2 )) +if (!strcasecmp (str,"on" ))bit_prop_set (dev, prop, true); -else if (!strncasecmp (str,"off" ,3 )) +else if (!strcasecmp (str,"off" ))bit_prop_set (dev, prop, false);else return -EINVAL ;
Signature · 1 line
1.7.3.4
Am 21.01.2012 14:43, schrieb Jan Kiszka:
Quoted 4 lines
By using strncasecmp, we allow for arbitrary characters after the "on"/"off" string. Fix this by switching to strcasecmp.
Signed-off-by Jan Kiszka <[email protected]>
An alternative might be to increase the char count by one. For a const char* parameter I see the responsibility for nul-terminating at the caller though, so this seems right. Did you check all callers?
Andreas
Quoted 20 lines
--- hw/qdev-properties.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)hw/qdev-properties.c +2
-2@@ -40,9 +40,9 @@ static void qdev_prop_cpy(DeviceState *dev, Property *props, void *src)/* Bit */ static int parse_bit (DeviceState *dev,Property *prop,const char *str) { -if (!strncasecmp (str,"on" ,2 )) +if (!strcasecmp (str,"on" ))bit_prop_set (dev, prop, true); -else if (!strncasecmp (str,"off" ,3 )) +else if (!strcasecmp (str,"off" ))bit_prop_set (dev, prop, false);else return -EINVAL ;
Signature · 2 lines
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
Quoted 11 lines · Andreas Färber
Am 21.01.2012 14:43, schrieb Jan Kiszka:
Quoted 4 lines
By using strncasecmp, we allow for arbitrary characters after the "on"/"off" string. Fix this by switching to strcasecmp.
Signed-off-by Jan Kiszka <[email protected]>Reviewed-by Andreas Färber <[email protected]>An alternative might be to increase the char count by one. For a const char* parameter I see the responsibility for nul-terminating at the caller though, so this seems right. Did you check all callers?
For any normal function that takes a char * string without a maximum length, the responsibility for terminating is on caller side. Also because we checks against patterns of different length. So we don't need to jump through hoops here.
Jan
Markus Armbruster
Reviewed-byQuoted 9 lines · Jan Kiszka
Quoted 8 lines · Andreas Färber
Am 21.01.2012 14:43, schrieb Jan Kiszka:
Quoted 4 lines
By using strncasecmp, we allow for arbitrary characters after the "on"/"off" string. Fix this by switching to strcasecmp.
Signed-off-by Jan Kiszka <[email protected]>Reviewed-by Andreas Färber <[email protected]>
Quoted 8 lines
Quoted 3 lines
An alternative might be to increase the char count by one. For a const char* parameter I see the responsibility for nul-terminating at the caller though, so this seems right. Did you check all callers?
For any normal function that takes a char * string without a maximum length, the responsibility for terminating is on caller side. Also because we checks against patterns of different length. So we don't need to jump through hoops here.
I agree.
Stefan Hajnoczi
AppliedQuoted 7 lines · Jan Kiszka
By using strncasecmp, we allow for arbitrary characters after the "on"/"off" string. Fix this by switching to strcasecmp.
Signed-off-by Jan Kiszka <[email protected]>--- hw/qdev-properties.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
Thanks, applied to the trivial patches tree:
https://github.com/stefanha/qemu/commits/trivial-patches
Stefan