]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4264. [bug] Check const of strchr/strrchr assignments match
authorMark Andrews <marka@isc.org>
Fri, 20 Nov 2015 07:38:24 +0000 (18:38 +1100)
committerMark Andrews <marka@isc.org>
Fri, 20 Nov 2015 07:38:24 +0000 (18:38 +1100)
                        argument's const status. [RT #41150]

22 files changed:
CHANGES
bin/check/named-checkzone.c
bin/dig/dig.c
bin/dig/dighost.c
bin/dnssec/dnssec-revoke.c
bin/dnssec/dnssec-settime.c
bin/nsupdate/nsupdate.c
bin/tests/db_test.c
bin/tests/nsecify.c
bin/tests/rbt_test.c
bin/tools/mdig.c
lib/dns/openssldh_link.c
lib/dns/opensslrsa_link.c
lib/dns/zone.c
lib/isc/base32.c
lib/isc/base64.c
lib/isc/commandline.c
lib/isc/hex.c
lib/isc/include/isc/file.h
lib/isc/string.c
lib/isc/unix/file.c
lib/isc/win32/file.c

diff --git a/CHANGES b/CHANGES
index 26b78d4f2851341d57473eaab228e7ada7bc9f55..06e90008c2156f0dc6950ada9b411e587c4fc779 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+4264.  [bug]           Check const of strchr/strrchr assignments match
+                       argument's const status. [RT #41150]
+
 4263.  [contrib]       Address compiler warnings in mysqldyn module.
                        [RT #41130]
 
index 30dd0db1bdb551d208791e2247d0e687b0c1a45b..70b8426d4694dfadac64110a706a3f217ecab7a3 100644 (file)
@@ -58,7 +58,7 @@ dns_zone_t *zone = NULL;
 dns_zonetype_t zonetype = dns_zone_master;
 static int dumpzone = 0;
 static const char *output_filename;
-static char *prog_name = NULL;
+static const char *prog_name = NULL;
 static const dns_master_style_t *outputstyle = NULL;
 static enum { progmode_check, progmode_compile } progmode;
 
index 50ca7d1460d9802216b4ec8c775a9849458824ac..52e5df009a8e162c2a202c3c2d4504b052e1ff8a 100644 (file)
@@ -739,7 +739,7 @@ printgreeting(int argc, char **argv, dig_lookup_t *lookup) {
  */
 
 static void
-plus_option(char *option, isc_boolean_t is_batchfile,
+plus_option(const char *option, isc_boolean_t is_batchfile,
            dig_lookup_t *lookup)
 {
        isc_result_t result;
@@ -752,7 +752,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
        strncpy(option_store, option, sizeof(option_store));
        option_store[sizeof(option_store)-1]=0;
        ptr = option_store;
-       cmd = next_token(&ptr,"=");
+       cmd = next_token(&ptr, "=");
        if (cmd == NULL) {
                printf(";; Invalid option %s\n", option_store);
                return;
@@ -1406,7 +1406,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
        invalid_option:
        need_value:
                fprintf(stderr, "Invalid option: +%s\n",
-                        option);
+                       option);
                usage();
        }
        return;
@@ -1636,14 +1636,14 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
                                 value);
                return (value_from_next);
        case 'y':
-               ptr = next_token(&value,":");   /* hmac type or name */
+               ptr = next_token(&value, ":");  /* hmac type or name */
                if (ptr == NULL) {
                        usage();
                }
                ptr2 = next_token(&value, ":"); /* name or secret */
                if (ptr2 == NULL)
                        usage();
-               ptr3 = next_token(&value,":"); /* secret or NULL */
+               ptr3 = next_token(&value, ":"); /* secret or NULL */
                if (ptr3 != NULL) {
                        parse_hmac(ptr);
                        ptr = ptr2;
index 2fb7283721388be88044142fe0275c1dfdbb116f..9785e900c1420ab00118b62fdc47c8ffe8e93020 100644 (file)
@@ -463,7 +463,7 @@ append(const char *text, int len, char **p, char *end) {
 
 static isc_result_t
 reverse_octets(const char *in, char **p, char *end) {
-       char *dot = strchr(in, '.');
+       const char *dot = strchr(in, '.');
        int len;
        if (dot != NULL) {
                isc_result_t result;
@@ -1069,13 +1069,17 @@ parse_netprefix(isc_sockaddr_t **sap, const char *value) {
        isc_uint32_t netmask = 0;
        char *slash = NULL;
        isc_boolean_t parsed = ISC_FALSE;
+       char buf[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:XXX.XXX.XXX.XXX/128")];
 
-       if ((slash = strchr(value, '/'))) {
+       if (strlcpy(buf, value, sizeof(buf)) >= sizeof(buf))
+               fatal("invalid prefix '%s'\n", value);
+
+       slash = strchr(buf, '/');
+       if (slash != NULL) {
                *slash = '\0';
                result = isc_parse_uint32(&netmask, slash + 1, 10);
                if (result != ISC_R_SUCCESS) {
-                       *slash = '/';
-                       fatal("invalid prefix length '%s': %s\n",
+                       fatal("invalid prefix length in '%s': %s\n",
                              value, isc_result_totext(result));
                }
        }
@@ -1083,21 +1087,19 @@ parse_netprefix(isc_sockaddr_t **sap, const char *value) {
        sa = isc_mem_allocate(mctx, sizeof(*sa));
        if (sa == NULL)
                fatal("out of memory");
-       if (inet_pton(AF_INET6, value, &in6) == 1) {
-               isc_sockaddr_fromin6(sa, &in6, 0);
+       if (inet_pton(AF_INET6, buf, &in6) == 1) {
                parsed = ISC_TRUE;
+               isc_sockaddr_fromin6(sa, &in6, 0);
                if (netmask == 0 || netmask > 128)
                        netmask = 128;
-       } else if (inet_pton(AF_INET, value, &in4) == 1) {
+       } else if (inet_pton(AF_INET, buf, &in4) == 1) {
                parsed = ISC_TRUE;
                isc_sockaddr_fromin(sa, &in4, 0);
                if (netmask == 0 || netmask > 32)
                        netmask = 32;
        } else if (netmask != 0) {
-               char buf[64];
                int i;
 
-               strlcpy(buf, value, sizeof(buf));
                for (i = 0; i < 3; i++) {
                        strlcat(buf, ".0", sizeof(buf));
                        if (inet_pton(AF_INET, buf, &in4) == 1) {
@@ -1106,12 +1108,8 @@ parse_netprefix(isc_sockaddr_t **sap, const char *value) {
                                break;
                        }
                }
-
        }
 
-       if (slash != NULL)
-               *slash = '/';
-
        if (!parsed)
                fatal("invalid address '%s'", value);
 
@@ -1121,7 +1119,6 @@ parse_netprefix(isc_sockaddr_t **sap, const char *value) {
        return (ISC_R_SUCCESS);
 }
 
-
 /*
  * Parse HMAC algorithm specification
  */
index 31375ee03f1238620d37adb91c3ede38e6cf676a..7e2fab274e3e291b6356f6c1a9730403be64b387 100644 (file)
@@ -86,7 +86,8 @@ main(int argc, char **argv) {
 #else
        const char *engine = NULL;
 #endif
-       char *filename = NULL, *dir = NULL;
+       char const *filename = NULL;
+       char *dir = NULL;
        char newname[1024], oldname[1024];
        char keystr[DST_KEY_FORMATSIZE];
        char *endp;
index c5bd3ae6a7646e7dfc36b9d14ed60205a63d51ef..3a26550c4184a48b533468be9f2991912d9c978c 100644 (file)
@@ -133,7 +133,8 @@ main(int argc, char **argv) {
 #else
        const char      *engine = NULL;
 #endif
-       char            *filename = NULL, *directory = NULL;
+       const char      *filename = NULL;
+       char            *directory = NULL;
        char            newname[1024];
        char            keystr[DST_KEY_FORMATSIZE];
        char            *endp, *p;
index f4b1af2de60fc430dac0de4dd64c280788f0d687..66113c38ac6d2b6cd0df611d732de52f99e5b4d3 100644 (file)
@@ -2701,7 +2701,8 @@ get_ticket_realm(isc_mem_t *mctx) {
        krb5_error_code rc;
        krb5_ccache ccache;
        krb5_principal princ;
-       char *name, *ticket_realm;
+       char *name;
+       const char * ticket_realm;
 
        rc = krb5_init_context(&ctx);
        if (rc != 0)
index 259ed6c7e865860c53dca0224533fa8c73ca58d4..7926bf22931fb954fe9b5019fd84e121b392722d 100644 (file)
@@ -367,7 +367,7 @@ main(int argc, char *argv[]) {
        dns_name_t *fname;
        unsigned int options = 0, zcoptions;
        isc_time_t start, finish;
-       char *origintext;
+       const char *origintext;
        dbinfo *dbi;
        dns_dbversion_t *version;
        dns_name_t *origin;
index c31b08aaaf24ce63de5e43b7be55e014fa3c9750..6092083b4a52ddef00358d1f79cd3312ac66e5bf 100644 (file)
@@ -118,7 +118,7 @@ nsecify(char *filename) {
        dns_db_t *db;
        dns_dbversion_t *wversion;
        dns_dbnode_t *node, *nextnode;
-       char *origintext;
+       const char *origintext;
        dns_fixedname_t fname, fnextname;
        dns_name_t *name, *nextname, *target;
        isc_buffer_t b;
index a9d20d9635c08672b1bf7bb577589f94485fdce4..0a59435a0f40b336abaea974fd7ad24073ce6c7c 100644 (file)
@@ -31,7 +31,7 @@
 #include <dns/fixedname.h>
 #include <dns/result.h>
 
-char *progname;
+const char *progname;
 isc_mem_t *mctx;
 
 #define DNSNAMELEN 255
index 71102453a97ffcbb136450cef74af7dcba124513..0908617187dea0af18840c88099648fb44c02b46 100644 (file)
@@ -88,7 +88,7 @@
 
 static isc_mem_t *mctx;
 static dns_requestmgr_t *requestmgr;
-static char *batchname;
+static const char *batchname;
 static FILE *batchfp;
 static isc_boolean_t have_ipv4 = ISC_FALSE;
 static isc_boolean_t have_ipv6 = ISC_FALSE;
@@ -906,13 +906,16 @@ parse_netprefix(isc_sockaddr_t **sap, const char *value) {
        isc_uint32_t netmask = 0;
        char *slash = NULL;
        isc_boolean_t parsed = ISC_FALSE;
+       char buf[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:XXX.XXX.XXX.XXX/128")];
 
-       if ((slash = strchr(value, '/'))) {
-               *slash = '\0';
+       if (strlcpy(buf, value, sizeof(buf)) >= sizeof(buf))
+               fatal("invalid prefix '%s'\n", value);
+
+       slash = strchr(buf, '/');
+       if (slash != NULL) {
                result = isc_parse_uint32(&netmask, slash + 1, 10);
                if (result != ISC_R_SUCCESS) {
-                       *slash = '/';
-                       fatal("invalid prefix length '%s': %s\n",
+                       fatal("invalid prefix length in '%s': %s\n",
                              value, isc_result_totext(result));
                }
        }
@@ -920,21 +923,19 @@ parse_netprefix(isc_sockaddr_t **sap, const char *value) {
        sa = isc_mem_allocate(mctx, sizeof(*sa));
        if (sa == NULL)
                fatal("out of memory");
-       if (inet_pton(AF_INET6, value, &in6) == 1) {
-               isc_sockaddr_fromin6(sa, &in6, 0);
+       if (inet_pton(AF_INET6, buf, &in6) == 1) {
                parsed = ISC_TRUE;
+               isc_sockaddr_fromin6(sa, &in6, 0);
                if (netmask == 0 || netmask > 128)
                        netmask = 128;
-       } else if (inet_pton(AF_INET, value, &in4) == 1) {
+       } else if (inet_pton(AF_INET, buf, &in4) == 1) {
                parsed = ISC_TRUE;
                isc_sockaddr_fromin(sa, &in4, 0);
                if (netmask == 0 || netmask > 32)
                        netmask = 32;
        } else if (netmask != 0) {
-               char buf[64];
                int i;
 
-               strlcpy(buf, value, sizeof(buf));
                for (i = 0; i < 3; i++) {
                        strlcat(buf, ".0", sizeof(buf));
                        if (inet_pton(AF_INET, buf, &in4) == 1) {
@@ -946,9 +947,6 @@ parse_netprefix(isc_sockaddr_t **sap, const char *value) {
 
        }
 
-       if (slash != NULL)
-               *slash = '/';
-
        if (!parsed)
                fatal("invalid address '%s'", value);
 
@@ -973,7 +971,7 @@ append(const char *text, int len, char **p, char *end) {
 
 static isc_result_t
 reverse_octets(const char *in, char **p, char *end) {
-       char *dot = strchr(in, '.');
+       const char *dot = strchr(in, '.');
        int len;
        if (dot != NULL) {
                isc_result_t result;
@@ -989,7 +987,8 @@ reverse_octets(const char *in, char **p, char *end) {
 }
 
 static void
-get_reverse(char *reverse, size_t len, char *value, isc_boolean_t ip6_int)
+get_reverse(char *reverse, size_t len, const char *value,
+           isc_boolean_t ip6_int)
 {
        int r;
        isc_result_t result;
@@ -1515,13 +1514,14 @@ plus_option(char *option, struct query *query, isc_boolean_t global)
 static const char *single_dash_opts = "46hiv";
 /*static const char *dash_opts = "46bcfhiptvx";*/
 static isc_boolean_t
-dash_option(char *option, char *next, struct query *query,
+dash_option(const char *option, char *next, struct query *query,
            isc_boolean_t global, isc_boolean_t *setname)
 {
-       char opt, *value;
+       char opt;
+       const char *value;
        isc_result_t result;
        isc_boolean_t value_from_next;
-       isc_textregion_t tr;
+       isc_consttextregion_t tr;
        dns_rdatatype_t rdtype;
        dns_rdataclass_t rdclass;
        char textname[MXNAME];
index 67fbf695dd5a61d42e83308739a4a2827a0f4053..07077c7a779096d304729a72b88541378cbee7d1 100644 (file)
@@ -623,7 +623,7 @@ BN_fromhex(BIGNUM *b, const char *str) {
 
        RUNTIME_CHECK(strlen(str) < 1024U && strlen(str) % 2 == 0U);
        for (i = 0; i < strlen(str); i += 2) {
-               char *s;
+               const char *s;
                unsigned int high, low;
 
                s = strchr(hexdigits, tolower((unsigned char)str[i]));
index d799be0a1380d81fecbb26e96abd2151cf58c5a8..46049d7163e9005fb28d206b859c8f25949d42ba 100644 (file)
@@ -1398,8 +1398,7 @@ opensslrsa_fromlabel(dst_key_t *key, const char *engine, const char *label,
        UNUSED(pin);
 
        if (engine == NULL) {
-               colon = strchr(label, ':');
-               if (colon == NULL)
+               if (strchr(label, ':') == NULL)
                        DST_RET(DST_R_NOENGINE);
                tmpengine = isc_mem_strdup(key->mctx, label);
                if (tmpengine == NULL)
index de41f176fe825bed3f154887a7fe52cfc1feec66..0f971add291cd0d27388f970ecac4bbc0b26f872 100644 (file)
@@ -18209,7 +18209,7 @@ dns_zone_keydone(dns_zone_t *zone, const char *keystr) {
                kd->all = ISC_TRUE;
        else {
                isc_textregion_t r;
-               char *algstr;
+               const char *algstr;
                dns_keytag_t keyid;
                dns_secalg_t alg;
                size_t n;
index 2ee99b182426b9a4a8d87305e0e553bd75ea6da9..5f0332d7424630b9af0e5edc05d789203ae2b723 100644 (file)
@@ -170,7 +170,7 @@ base32_decode_init(base32_decode_ctx_t *ctx, int length, const char base[],
 
 static inline isc_result_t
 base32_decode_char(base32_decode_ctx_t *ctx, int c) {
-       char *s;
+       const char *s;
        unsigned int last;
 
        if (ctx->seen_end)
index 6b4cb1bf7c63379c442ace70dbc1d65c443d046b..26c3a09b6b87a624a659ad1016fc3926126ee314 100644 (file)
@@ -118,7 +118,7 @@ base64_decode_init(base64_decode_ctx_t *ctx, int length, isc_buffer_t *target)
 
 static inline isc_result_t
 base64_decode_char(base64_decode_ctx_t *ctx, int c) {
-       char *s;
+       const char *s;
 
        if (ctx->seen_end)
                return (ISC_R_BADBASE64);
index c4e18df4967001444db2b107c6dab2d18f802d1c..dbfe5dcf6671bbcffc2c6d7c33e4c396bbcf47d2 100644 (file)
@@ -96,7 +96,7 @@ static char endopt = '\0';
 int
 isc_commandline_parse(int argc, char * const *argv, const char *options) {
        static char *place = ENDOPT;
-       char *option;                   /* Index into *options of option. */
+       const char *option;             /* Index into *options of option. */
 
        REQUIRE(argc >= 0 && argv != NULL && options != NULL);
 
index 00903c7374cf8f9012558c1eb519ce721c3b1783..0beb4ec4022383afabed797fd36907f0f6d7ca30 100644 (file)
@@ -95,7 +95,7 @@ hex_decode_init(hex_decode_ctx_t *ctx, int length, isc_buffer_t *target)
 
 static inline isc_result_t
 hex_decode_char(hex_decode_ctx_t *ctx, int c) {
-       char *s;
+       const char *s;
 
        if ((s = strchr(hex, toupper(c))) == NULL)
                return (ISC_R_BADHEX);
index 2174f703b23f91794af715583ed3c5793b6dc0b4..a7f26ccad9af18ddf0fcee761e1fd67efa64727e 100644 (file)
@@ -315,8 +315,8 @@ isc_file_safecreate(const char *filename, FILE **fp);
  */
 
 isc_result_t
-isc_file_splitpath(isc_mem_t *mctx, char *path,
-                  char **dirname, char **basename);
+isc_file_splitpath(isc_mem_t *mctx, const char *path,
+                  char **dirname, char const **basename);
 /*%<
  * Split a path into dirname and basename.  If 'path' contains no slash
  * (or, on windows, backslash), then '*dirname' is set to ".".
index 56ec444bffaad7e3cbdbf58e70d381dfbd5d16e3..3a2bf345aa7c55be6789b4301cb86f519ec86107 100644 (file)
 #include <isc/string.h>
 #include <isc/util.h>
 
-static char digits[] = "0123456789abcdefghijklmnoprstuvwxyz";
+static const char digits[] = "0123456789abcdefghijklmnoprstuvwxyz";
 
 isc_uint64_t
 isc_string_touint64(char *source, char **end, int base) {
        isc_uint64_t tmp;
        isc_uint64_t overflow;
        char *s = source;
-       char *o;
+       const char *o;
        char c;
 
        if ((base < 0) || (base == 1) || (base > 36)) {
index 3a76e0833c37a3063d7fd6b0f18fba7ab0f88453..e986323f431980c3e30649d097917da7420470d9 100644 (file)
@@ -226,8 +226,9 @@ isc_file_mktemplate(const char *path, char *buf, size_t buflen) {
 
 isc_result_t
 isc_file_template(const char *path, const char *templet, char *buf,
-                       size_t buflen) {
-       char *s;
+                 size_t buflen)
+{
+       const char *s;
 
        REQUIRE(path != NULL);
        REQUIRE(templet != NULL);
@@ -285,7 +286,7 @@ isc_file_renameunique(const char *file, char *templet) {
                if (errno != EEXIST)
                        return (isc__errno2result(errno));
                for (cp = x;;) {
-                       char *t;
+                       const char *t;
                        if (*cp == '\0')
                                return (ISC_R_FAILURE);
                        t = strchr(alphnum, *cp);
@@ -503,7 +504,7 @@ isc_file_ischdiridempotent(const char *filename) {
 
 const char *
 isc_file_basename(const char *filename) {
-       char *s;
+       const char *s;
 
        REQUIRE(filename != NULL);
 
@@ -621,9 +622,11 @@ isc_file_safecreate(const char *filename, FILE **fp) {
 }
 
 isc_result_t
-isc_file_splitpath(isc_mem_t *mctx, char *path, char **dirname, char **basename)
+isc_file_splitpath(isc_mem_t *mctx, const char *path, char **dirname,
+                  char const **basename)
 {
-       char *dir, *file, *slash;
+       char *dir;
+       const char *file, *slash;
 
        if (path == NULL)
                return (ISC_R_INVALIDFILE);
index 99e52d2e96445a6fff0358a3caed14a449b56cd8..a1ae0027f41755c449d69c1662dc62e16bc3de3a 100644 (file)
@@ -325,7 +325,8 @@ isc_file_mktemplate(const char *path, char *buf, size_t buflen) {
 
 isc_result_t
 isc_file_template(const char *path, const char *templet, char *buf,
-                       size_t buflen) {
+                 size_t buflen)
+{
        char *s;
 
        REQUIRE(path != NULL);
@@ -588,7 +589,7 @@ isc_file_basename(const char *filename) {
 isc_result_t
 isc_file_progname(const char *filename, char *progname, size_t namelen) {
        const char *s;
-       char *p;
+       const char *p;
        size_t len;
 
        REQUIRE(filename != NULL);
@@ -700,9 +701,11 @@ isc_file_safecreate(const char *filename, FILE **fp) {
 }
 
 isc_result_t
-isc_file_splitpath(isc_mem_t *mctx, char *path, char **dirname, char **basename)
+isc_file_splitpath(isc_mem_t *mctx, const char *path, char **dirname,
+                  char const ** basename)
 {
-       char *dir, *file, *slash;
+       char *dir;
+       const char *file, *slash;
        char *backslash;
 
        slash = strrchr(path, '/');