]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
silence clang warning by using local variable.
authorMark Andrews <marka@isc.org>
Tue, 1 Oct 2019 04:06:53 +0000 (14:06 +1000)
committerMark Andrews <marka@isc.org>
Fri, 4 Oct 2019 01:36:19 +0000 (11:36 +1000)
'isc_commandline_index' is a global variable so it can theoretically
change result between if expressions.  Save 'argv[isc_commandline_index]'
to local variable 'arg1' and use 'arg1 == NULL' in if expressions
instead of 'argc < isc_commandline_index + 1'.  This allows clang
to correctly determine what code is reachable.

(cherry picked from commit 1b27ab8642a43617d1359375d1cff7afd5bd79e3)

bin/dnssec/dnssec-dsfromkey.c

index 9f6b3870b3eca9793c3fc46a61f19b2f3b543135..0bf3517e75a7e7f64007838196c3063b310056ea 100644 (file)
@@ -348,7 +348,7 @@ main(int argc, char **argv) {
        char            *classname = NULL;
        char            *filename = NULL, *dir = NULL, *namestr;
        char            *lookaside = NULL;
-       char            *endp;
+       char            *endp, *arg1;
        int             ch;
        dns_dsdigest_t  dtype = DNS_DSDIGEST_SHA1;
        bool    cds = false;
@@ -476,10 +476,15 @@ main(int argc, char **argv) {
                showall = true;
        }
 
-       if (argc < isc_commandline_index + 1 && filename == NULL) {
+       /*
+        * Use local variable arg1 so that clang can correctly analyse
+        * reachable paths rather than 'argc < isc_commandline_index + 1'.
+        */
+       arg1 = argv[isc_commandline_index];
+       if (arg1 == NULL && filename == NULL) {
                fatal("the key file name was not specified");
        }
-       if (argc > isc_commandline_index + 1) {
+       if (arg1 != NULL && argv[isc_commandline_index + 1] != NULL) {
                fatal("extraneous arguments");
        }
 
@@ -494,11 +499,11 @@ main(int argc, char **argv) {
        dns_rdataset_init(&rdataset);
 
        if (usekeyset || filename != NULL) {
-               if (argc < isc_commandline_index + 1) {
-                       /* using zone name as the zone file name */
+               if (arg1 == NULL) {
+                       /* using file name as the zone name */
                        namestr = filename;
                } else {
-                       namestr = argv[isc_commandline_index];
+                       namestr = arg1;
                }
 
                result = initname(namestr);
@@ -540,8 +545,7 @@ main(int argc, char **argv) {
        } else {
                unsigned char key_buf[DST_KEY_MAXSIZE];
 
-               loadkey(argv[isc_commandline_index], key_buf,
-                       DST_KEY_MAXSIZE, &rdata);
+               loadkey(arg1, key_buf, DST_KEY_MAXSIZE, &rdata);
 
                if (both) {
                        emit(DNS_DSDIGEST_SHA1, showall, lookaside, cds,