From: Baptiste Daroussin Date: Sun, 12 Feb 2023 08:48:43 +0000 (+0100) Subject: strto*: fix crash if the pointer to the error pointer is NULL X-Git-Tag: RELEASE_1_4_0b1~163 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1e98a92e544b07500a0eca48b0d63db4149cc132;p=thirdparty%2Fmlmmj.git strto*: fix crash if the pointer to the error pointer is NULL --- diff --git a/src/utils.c b/src/utils.c index 1f4c245d..ff6a73fe 100644 --- a/src/utils.c +++ b/src/utils.c @@ -44,27 +44,32 @@ strtoim(const char *np, intmax_t minval, intmax_t maxval, const char **errpp) char *endp; intmax_t ret; - *errpp = NULL; + if (errpp != NULL) + *errpp = NULL; if (minval > maxval || np == NULL) { errno = EINVAL; - *errpp = "invalid"; + if (errpp != NULL) + *errpp = "invalid"; return (0); } errno = 0; ret = strtoimax(np, &endp, 10); if (endp == np || *endp != '\0') { errno = EINVAL; - *errpp = "invalid"; + if (errpp != NULL) + *errpp = "invalid"; return (0); } if (ret < minval) { errno = ERANGE; - *errpp = "too small"; + if (errpp != NULL) + *errpp = "too small"; return (0); } if (errno == ERANGE || ret > maxval) { errno = ERANGE; - *errpp = "too large"; + if (errpp != NULL) + *errpp = "too large"; return (0); } return (ret); @@ -84,27 +89,32 @@ strtouim(const char *np, uintmax_t minval, uintmax_t maxval, const char **errpp) char *endp; uintmax_t ret; - *errpp = NULL; + if (errpp != NULL) + *errpp = NULL; if (minval > maxval || np == NULL) { errno = EINVAL; - *errpp = "invalid"; + if (errpp != NULL) + *errpp = "invalid"; return (0); } errno = 0; ret = strtoumax(np, &endp, 10); if (endp == np || *endp != '\0') { errno = EINVAL; - *errpp = "invalid"; + if (errpp != NULL) + *errpp = "invalid"; return (0); } if (ret < minval) { errno = ERANGE; - *errpp = "too small"; + if (errpp != NULL) + *errpp = "too small"; return (0); } if (errno == ERANGE || ret > maxval) { errno = ERANGE; - *errpp = "too large"; + if (errpp != NULL) + *errpp = "too large"; return (0); } return (ret); diff --git a/tests/mlmmj.c b/tests/mlmmj.c index 062bf34d..a120adab 100644 --- a/tests/mlmmj.c +++ b/tests/mlmmj.c @@ -501,7 +501,7 @@ ATF_TC_BODY(strtoim, tc) ATF_REQUIRE_EQ(errno, EINVAL); ATF_REQUIRE(errp != NULL); ATF_REQUIRE_STREQ(errp, "invalid"); - + ATF_REQUIRE_EQ(strtoim("ba12", 0, 9, NULL), 0); ATF_REQUIRE_EQ(strtouim(NULL, 0, 10, &errp), 0); ATF_REQUIRE(errp != NULL); @@ -524,6 +524,7 @@ ATF_TC_BODY(strtoim, tc) ATF_REQUIRE_EQ(errno, EINVAL); ATF_REQUIRE(errp != NULL); ATF_REQUIRE_STREQ(errp, "invalid"); + ATF_REQUIRE_EQ(strtouim("ba12", 0, 9, NULL), 0); } ATF_TC_BODY(write_ehlo, tc)