On Friday 24 April 2020 20:21:33 Pali Rohár wrote: > Commit 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16 > detection") broke parsing MTD partition sizes specified in decimal base. > > E.g. "128k(bootloader)" is parsed by drivers/mtd/mtdpart.c as hexadecimal > number (0x128 << 10) because character 'a' in substring "bootloader" caused > parsing whole number as hexadecimal. > > This patch stop doing hexadecimal base heuristic on first non-valid > hexadecimal number, so "128k(bootloader)" is parsed as decimal number 128. > > Fixes: 0486497e2b5f ("lib: Improve _parse_integer_fixup_radix base 16...") > Signed-off-by: Pali Rohár <p...@kernel.org> > --- > lib/strto.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/lib/strto.c b/lib/strto.c > index 1ac2b09c72..060b66b915 100644 > --- a/lib/strto.c > +++ b/lib/strto.c > @@ -30,6 +30,9 @@ static const char *_parse_integer_fixup_radix(const char > *s, unsigned int *base) > > do { > var = tolower(s[i++]); > + if (!(var >= '0' && var <= '9') && > + !(var >= 'a' && var <= 'f')) > + break; > if (var >= 'a' && var <= 'f') { > *base = 16; > break; > -- > 2.20.1 >
CC Tom, this problem was detected by my in-progress Travis Nokia N900 test which tries to boot kernel from the OneNAND. Build log is there: https://travis-ci.org/github/u-boot/u-boot/jobs/679007310