]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[master] fix negative numbers in $GENERATE
authorEvan Hunt <each@isc.org>
Mon, 10 Mar 2014 18:55:32 +0000 (11:55 -0700)
committerEvan Hunt <each@isc.org>
Mon, 10 Mar 2014 18:55:32 +0000 (11:55 -0700)
3780. [bug] $GENERATE handled negative numbers incorrectly.
[RT #25528]

CHANGES
bin/tests/system/checkzone/zones/bad2.db [new file with mode: 0644]
doc/arm/Bv9ARM-book.xml
lib/dns/master.c

diff --git a/CHANGES b/CHANGES
index eabccd045e6ffcb5de3b7a95bd76352a7440d4fb..71cf63ef449dbff0565431572fe915211307e3a6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3780.  [bug]           $GENERATE handled negative numbers incorrectly. 
+                       [RT #25528]
+
 3779.  [cleanup]       Clarify the error message when using an option
                        that was not enabled at compile time. [RT #35504]
 
diff --git a/bin/tests/system/checkzone/zones/bad2.db b/bin/tests/system/checkzone/zones/bad2.db
new file mode 100644 (file)
index 0000000..d67a84c
--- /dev/null
@@ -0,0 +1,22 @@
+; Copyright (C) 2014  Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+$TTL 600
+@              SOA     ns hostmaster 2011012708 3600 1200 604800 1200
+               NS      ns
+ns             A       192.0.2.1
+
+; The following GENERATE directive contains two dashes in the range
+; which is a syntax error.
+$GENERATE 9--10 host$ 3600 A 192.0.2.$
index 6392a36248ab997462a66e5d6c64e3ea7a083ca2..a5da819544a1c41a59d2a6e859e4410087429712 100644 (file)
@@ -14205,8 +14205,9 @@ HOST-127.EXAMPLE. MX 0 .
                    <para>
                      This can be one of two forms: start-stop
                      or start-stop/step. If the first form is used, then step
-                     is set to
-                     1. All of start, stop and step must be positive.
+                     is set to 1. start, stop and step must be positive
+                     integers between 0 and (2^31)-1. start must not be
+                     larger than stop.
                    </para>
                  </entry>
                </row>
index 0300b5035a268aebea8883dad4fdbfec675ea9e8..8e8b5c61f65f3241b4904d21bcee64446fe0ee96 100644 (file)
@@ -806,7 +806,7 @@ 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;
-       unsigned int start, stop, step, i;
+       int start, stop, step, i;
        dns_incctx_t *ictx;
 
        ictx = lctx->inc;
@@ -824,8 +824,10 @@ generate(dns_loadctx_t *lctx, char *range, char *lhs, char *gtype, char *rhs,
        }
        isc_buffer_init(&target, target_mem, target_size);
 
-       n = sscanf(range, "%u-%u/%u", &start, &stop, &step);
-       if (n < 2 || stop < start) {
+       n = sscanf(range, "%d-%d/%d", &start, &stop, &step);
+       if ((n < 2) || (start < 0) || (stop < 0) || (step < 0) ||
+           (stop < start))
+       {
               (*callbacks->error)(callbacks,
                                  "%s: %s:%lu: invalid range '%s'",
                                  "$GENERATE", source, line, range);