[PATCH] lib: strto: Fix parsing MTD partition size

Pali Rohár pali at kernel.org
Fri Apr 24 20:21:33 CEST 2020


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 <pali at 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



More information about the U-Boot mailing list