* [U-Boot] [PATCH v2] cmd_fdt.c: fix parse of byte streams and strings
@ 2009-09-11 20:16 Ken MacLeod
2009-09-11 20:21 ` Jerry Van Baren
0 siblings, 1 reply; 2+ messages in thread
From: Ken MacLeod @ 2009-09-11 20:16 UTC (permalink / raw)
To: u-boot
Commit 4abd844d8e extended the fdt command parser to handle property
strings which are split across multiple arguments but it was broken for
byte streams and strings.
Byte stream parsing:
* Fixes where it would terminate early or go into an endless loop.
* Fixes a 0x00 being inserted into the data if there is a space after
'[' or a separate argument.
* Fixes dereferencing the argument pointer after the last argument.
* Checks for bad characters.
String parsing:
* Treat multiple arguments as a string list. This fixes an issue where
only the last argument was stored.
Signed-off-by: Ken MacLeod <ken@bitsko.slc.ut.us>
---
The previous version of this patch 1) only fixed the first byte stream
issue above and 2) concatenated the string arguments rather than
creating a list (pointed out by Scott Wood).
common/cmd_fdt.c | 23 +++++++++++++++--------
1 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/common/cmd_fdt.c b/common/cmd_fdt.c
index 8683772..919a0bf 100644
--- a/common/cmd_fdt.c
+++ b/common/cmd_fdt.c
@@ -574,14 +574,18 @@ static int fdt_parse_prop(char **newval, int count, char *data, int *len)
* Byte stream. Convert the values.
*/
newp++;
- while ((*newp != ']') && (stridx < count)) {
- tmp = simple_strtoul(newp, &newp, 16);
- *data++ = tmp & 0xFF;
- *len = *len + 1;
+ while ((stridx < count) && (*newp != ']')) {
while (*newp == ' ')
newp++;
- if (*newp != '\0')
+ if (*newp == '\0') {
newp = newval[++stridx];
+ continue;
+ }
+ if (!isxdigit(*newp))
+ break;
+ tmp = simple_strtoul(newp, &newp, 16);
+ *data++ = tmp & 0xFF;
+ *len = *len + 1;
}
if (*newp != ']') {
printf("Unexpected character '%c'\n", *newp);
@@ -589,12 +593,15 @@ static int fdt_parse_prop(char **newval, int count, char *data, int *len)
}
} else {
/*
- * Assume it is a string. Copy it into our data area for
- * convenience (including the terminating '\0').
+ * Assume it is one or more strings. Copy it into our
+ * data area for convenience (including the
+ * terminating '\0's).
*/
while (stridx < count) {
- *len = strlen(newp) + 1;
+ size_t length = strlen(newp) + 1;
strcpy(data, newp);
+ data += length;
+ *len += length;
newp = newval[++stridx];
}
}
--
1.5.4.7
^ permalink raw reply related [flat|nested] 2+ messages in thread* [U-Boot] [PATCH v2] cmd_fdt.c: fix parse of byte streams and strings
2009-09-11 20:16 [U-Boot] [PATCH v2] cmd_fdt.c: fix parse of byte streams and strings Ken MacLeod
@ 2009-09-11 20:21 ` Jerry Van Baren
0 siblings, 0 replies; 2+ messages in thread
From: Jerry Van Baren @ 2009-09-11 20:21 UTC (permalink / raw)
To: u-boot
Ken MacLeod wrote:
> Commit 4abd844d8e extended the fdt command parser to handle property
> strings which are split across multiple arguments but it was broken for
> byte streams and strings.
[snip]
> Signed-off-by: Ken MacLeod <ken@bitsko.slc.ut.us>
> ---
>
> The previous version of this patch 1) only fixed the first byte stream
> issue above and 2) concatenated the string arguments rather than
> creating a list (pointed out by Scott Wood).
Thanks! I'll check it out and queue it up.
gvb
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-09-11 20:21 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-11 20:16 [U-Boot] [PATCH v2] cmd_fdt.c: fix parse of byte streams and strings Ken MacLeod
2009-09-11 20:21 ` Jerry Van Baren
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox