summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2008-06-07 08:30:06 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2008-06-07 08:30:06 +0000
commitcbbbaac6507987619c78a4c6c4228fd4b43d9cd6 (patch)
tree60145110997cfa7122d6bda150babfc368c041fc /apps
parent4bbdc5c3a3c1fa0a914989a660b0c53ad024ab16 (diff)
downloadrockbox-cbbbaac6507987619c78a4c6c4228fd4b43d9cd6.tar.gz
rockbox-cbbbaac6507987619c78a4c6c4228fd4b43d9cd6.tar.bz2
rockbox-cbbbaac6507987619c78a4c6c4228fd4b43d9cd6.zip
Make parse_list() a bit stricter by only allowing items to be skipped if they are explicitly marked with - e.g %V|0|0|-|-|1|-|-|
it will now error out if a - is missing and the item wasnt read properly git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17697 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/misc.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/apps/misc.c b/apps/misc.c
index 51e02f6a62..4d7ddd57e6 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -1220,6 +1220,7 @@ int hex_to_rgb(const char* hex, int* color)
valid_vals - if not NULL 1 is set in the bitplace if the item was read OK
0 if not read.
first item is LSB, (max 32 items! )
+ Stops parseing if an item is invalid unless the item == '-'
sep - list separator (e.g. ',' or '|')
str - string to parse, must be terminated by 0 or sep
... - pointers to store the parsed values
@@ -1262,14 +1263,14 @@ const char* parse_list(const char *fmt, unsigned int *valid_vals,
*s = p;
while (*p && *p != sep)
p++;
- valid = (*s[0]!=sep);
+ valid = (*s[0]!='-') && (*s[1]!=sep) ;
break;
case 'd': /* int */
d = va_arg(ap, int*);
if (!isdigit(*p))
{
- if (!valid_vals)
+ if (!valid_vals || *p != '-')
goto err;
while (*p && *p != sep)
p++;
@@ -1290,7 +1291,7 @@ const char* parse_list(const char *fmt, unsigned int *valid_vals,
if (hex_to_rgb(p, d) < 0)
{
- if (!valid_vals)
+ if (!valid_vals || *p != '-')
goto err;
while (*p && *p != sep)
p++;
@@ -1313,7 +1314,7 @@ const char* parse_list(const char *fmt, unsigned int *valid_vals,
*d = *p++ - '0';
valid = true;
}
- else if (!valid_vals)
+ else if (!valid_vals || *p != '-')
goto err;
else
{