device-mapper-multipath/0009-libmultipath-set_uint-fix-parsing-for-32bit.patch
Benjamin Marzinski c80b4a3ee2 device-mapper-multipath-0.8.4-1
Update Source to upstream version 0.8.2
  * Previoud patches 0001-0020 & 0031 are included in this commit
Rename files
  * Previous patches 0021-0032 are now patches 0012-0022
Add 0001-libmultipath-assign-variable-to-make-gcc-happy.patch
Add 0002-libmutipath-don-t-close-fd-on-dm_lib_release.patch
Add 0003-libmultipath-allow-force-reload-with-no-active-paths.patch
Add 0004-libmpathpersist-depend-on-libmultipath.patch
Add 0005-multipath-tools-Makefile-more-dependency-fixes-for-p.patch
Add 0006-multipath-tools-Makefile.inc-set-Wno-error-clobbered.patch
Add 0007-libmultipath-discovery.c-use-z-qualifier-for-size_t.patch
Add 0008-libmultipath-eliminate-more-signed-unsigned-comparis.patch
Add 0009-libmultipath-set_uint-fix-parsing-for-32bit.patch
Add 0010-multipath-tools-Makefile-add-install-dependency.patch
Add 0012-libmultipath-fix-condlog-NULL-argument-in-uevent_get.patch
Add 0023-RH-work-around-gcc-10-format-truncation-issue.patch
  * The above 10 patches have been submitted upstream
2020-05-29 20:47:35 -05:00

50 lines
1.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Tue, 12 May 2020 00:39:27 +0200
Subject: [PATCH] libmultipath: set_uint: fix parsing for 32bit
On architectures where sizeof(long) == sizeof(int), the code wouldn't
work as intended. Use strtoul instead. As strtoul happily parses
negative numbers as input, require the number to begin with a digit.
Signed-off-by: Martin Wilck <mwilck@suse.com>
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
libmultipath/dict.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/libmultipath/dict.c b/libmultipath/dict.c
index 3e25e74f..0e9ea387 100644
--- a/libmultipath/dict.c
+++ b/libmultipath/dict.c
@@ -60,19 +60,22 @@ static int
set_uint(vector strvec, void *ptr)
{
unsigned int *uint_ptr = (unsigned int *)ptr;
- char *buff, *eptr;
- long res;
+ char *buff, *eptr, *p;
+ unsigned long res;
int rc;
buff = set_value(strvec);
if (!buff)
return 1;
- res = strtol(buff, &eptr, 10);
+ p = buff;
+ while (isspace(*p))
+ p++;
+ res = strtoul(p, &eptr, 10);
if (eptr > buff)
while (isspace(*eptr))
eptr++;
- if (*buff == '\0' || *eptr != '\0' || res < 0 || res > UINT_MAX) {
+ if (*buff == '\0' || *eptr != '\0' || !isdigit(*p) || res > UINT_MAX) {
condlog(1, "%s: invalid value for %s: \"%s\"",
__func__, (char*)VECTOR_SLOT(strvec, 0), buff);
rc = 1;
--
2.17.2