]> 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)
committerEvan Hunt <each@isc.org>
Thu, 3 Oct 2019 22:02:59 +0000 (15:02 -0700)
'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.

bin/dnssec/dnssec-dsfromkey.c

index 47a5124b2a5bc11b7d8f5b2a8ebe5bf2c188978f..4923fe6e8a9e03724960e58726e9df8c2aa8c517 100644 (file)
@@ -332,7 +332,7 @@ int
 main(int argc, char **argv) {
        char            *classname = NULL;
        char            *filename = NULL, *dir = NULL, *namestr;
-       char            *endp;
+       char            *endp, *arg1;
        int             ch;
        bool            cds = false;
        bool            usekeyset = false;
@@ -444,10 +444,15 @@ main(int argc, char **argv) {
                dtype[0] = DNS_DSDIGEST_SHA256;
        }
 
-       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");
        }
 
@@ -462,11 +467,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);
@@ -502,8 +507,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);
 
                emits(showall, cds, &rdata);
        }