From 1b27ab8642a43617d1359375d1cff7afd5bd79e3 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Tue, 1 Oct 2019 14:06:53 +1000 Subject: [PATCH] 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. --- bin/dnssec/dnssec-dsfromkey.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/bin/dnssec/dnssec-dsfromkey.c b/bin/dnssec/dnssec-dsfromkey.c index 47a5124b2a..4923fe6e8a 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); }