From patchwork Fri Apr 24 18:21:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Pali_Roh=C3=A1r?= X-Patchwork-Id: 238429 List-Id: U-Boot discussion From: pali at kernel.org (=?UTF-8?q?Pali=20Roh=C3=A1r?=) Date: Fri, 24 Apr 2020 20:21:33 +0200 Subject: [PATCH] lib: strto: Fix parsing MTD partition size Message-ID: <20200424182133.17335-1-pali@kernel.org> 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 --- 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;