]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Prevent arithmetic overflow of 'i' in master.c:generate
authorMark Andrews <marka@isc.org>
Thu, 3 Mar 2022 22:37:39 +0000 (09:37 +1100)
committerMark Andrews <marka@isc.org>
Fri, 1 Apr 2022 10:42:53 +0000 (21:42 +1100)
the value of 'i' in generate could overflow when adding 'step' to
it in the 'for' loop.  Use an unsigned int for 'i' which will give
an additional bit and prevent the overflow.  The inputs are both
less than 2^31 and and the result will be less than 2^32-1.

(cherry picked from commit 5abdee9004f118b2c1301229418f93de7626e66f)

lib/dns/master.c

index 75f59396a7a07f7713d4f4ff11ce4150593f0310..e1ba723104fb4c94dd039d454c1c134989dedd45 100644 (file)
@@ -800,7 +800,8 @@ generate(dns_loadctx_t *lctx, char *range, char *lhs, char *gtype, char *rhs,
        isc_buffer_t target;
        isc_result_t result;
        isc_textregion_t r;
-       int i, n, start, stop, step = 0;
+       int n, start, stop, step = 0;
+       unsigned int i;
        dns_incctx_t *ictx;
        char dummy[2];
 
@@ -855,7 +856,7 @@ generate(dns_loadctx_t *lctx, char *range, char *lhs, char *gtype, char *rhs,
                goto insist_cleanup;
        }
 
-       for (i = start; i <= stop; i += step) {
+       for (i = start; i <= (unsigned int)stop; i += step) {
                result = genname(lhs, i, lhsbuf, DNS_MASTER_LHS);
                if (result != ISC_R_SUCCESS) {
                        goto error_cleanup;