From 62aa386c4f1480953644de912569e4a429707ef5 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Mon, 21 Jun 2021 15:00:40 +0200 Subject: [PATCH] libuuid: check errno after strto..() Addresses: https://github.com/karelzak/util-linux/issues/1356 Signed-off-by: Karel Zak --- libuuid/src/parse.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/libuuid/src/parse.c b/libuuid/src/parse.c index ce9cc09e9..d0c69b0e6 100644 --- a/libuuid/src/parse.c +++ b/libuuid/src/parse.c @@ -37,6 +37,7 @@ #include #include +#include "c.h" #include "uuidP.h" int uuid_parse(const char *in, uuid_t uu) @@ -70,16 +71,28 @@ int uuid_parse_range(const char *in_start, const char *in_end, uuid_t uu) if (!isxdigit(*cp)) return -1; } + errno = 0; uuid.time_low = strtoul(in_start, NULL, 16); - uuid.time_mid = strtoul(in_start+9, NULL, 16); - uuid.time_hi_and_version = strtoul(in_start+14, NULL, 16); - uuid.clock_seq = strtoul(in_start+19, NULL, 16); + + if (!errno) + uuid.time_mid = strtoul(in_start+9, NULL, 16); + if (!errno) + uuid.time_hi_and_version = strtoul(in_start+14, NULL, 16); + if (!errno) + uuid.clock_seq = strtoul(in_start+19, NULL, 16); + if (errno) + return -1; + cp = in_start+24; buf[2] = 0; for (i=0; i < 6; i++) { buf[0] = *cp++; buf[1] = *cp++; + + errno = 0; uuid.node[i] = strtoul(buf, NULL, 16); + if (errno) + return -1; } uuid_pack(&uuid, uu);