From: Mark Andrews Date: Tue, 1 Oct 2019 04:06:53 +0000 (+1000) Subject: silence clang warning by using local variable. X-Git-Tag: v9.15.6~70^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1b27ab8642a43617d1359375d1cff7afd5bd79e3;p=thirdparty%2Fbind9.git silence clang warning by using local variable. '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. --- diff --git a/bin/dnssec/dnssec-dsfromkey.c b/bin/dnssec/dnssec-dsfromkey.c index 47a5124b2a5..4923fe6e8a9 100644 --- a/bin/dnssec/dnssec-dsfromkey.c +++ b/bin/dnssec/dnssec-dsfromkey.c @@ -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); }