nwrap: Fix strotoul checks for NSS_WRAPPER_MAX_HOSTENTS
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Thu, 19 Oct 2017 08:56:15 +0000 (10:56 +0200)
committerRalph Boehme <slow@samba.org>
Thu, 19 Oct 2017 14:42:17 +0000 (16:42 +0200)
The env and endptr pointers need to be dereferenced, but that is not
enough: we don't really want to regard an empty string (*env == '\0')
as a valid number.

Found by GCC 8.0.0 20170705 (experimental).

[2095/4103] Compiling lib/nss_wrapper/nss_wrapper.c
../lib/nss_wrapper/nss_wrapper.c: In function "nwrap_init":
../lib/nss_wrapper/nss_wrapper.c:1571:13: warning: comparison between pointer and zero character constant [-Wpointer-compare]
   if (((env != '\0') && (endptr == '\0')) ||
                ^~
                ../lib/nss_wrapper/nss_wrapper.c:1571:9: note: did you mean to dereference the pointer?
   if (((env != '\0') && (endptr == '\0')) ||
            ^
            ../lib/nss_wrapper/nss_wrapper.c:1571:33: warning: comparison between pointer and zero character constant [-Wpointer-compare]
   if (((env != '\0') && (endptr == '\0')) ||
                                    ^~
                                    ../lib/nss_wrapper/nss_wrapper.c:1571:26: note: did you mean to dereference the pointer?
   if (((env != '\0') && (endptr == '\0')) ||

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(master): Ralph B√∂hme <slow@samba.org>
Autobuild-Date(master): Thu Oct 19 16:42:17 CEST 2017 on sn-devel-144

lib/nss_wrapper/nss_wrapper.c

index 82581b17aaf73d868e5d5f62814f9178255fb545..566d02ca34be27bcb0269482e48b4a7c4b86af6b 100644 (file)
@@ -1567,8 +1567,9 @@ static void nwrap_init(void)
 
        env = getenv("NSS_WRAPPER_MAX_HOSTENTS");
        if (env != NULL) {
-               max_hostents_tmp = (size_t)strtol(env, &endptr, 10);
-               if (((env != '\0') && (endptr == '\0')) ||
+               max_hostents_tmp = (size_t)strtoul(env, &endptr, 10);
+               if ((*env == '\0') ||
+                   (*endptr != '\0') ||
                    (max_hostents_tmp == 0)) {
                        NWRAP_LOG(NWRAP_LOG_DEBUG,
                                  "Error parsing NSS_WRAPPER_MAX_HOSTENTS "