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

Reply via email to