]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3825. [bug] Address sign extension bug in isc_regex_validate.
authorMark Andrews <marka@isc.org>
Tue, 29 Apr 2014 04:33:21 +0000 (14:33 +1000)
committerMark Andrews <marka@isc.org>
Tue, 29 Apr 2014 04:33:21 +0000 (14:33 +1000)
                        [RT #35758]

CHANGES
lib/isc/regex.c

diff --git a/CHANGES b/CHANGES
index 39689a1200fa160fcdc71844a2750a3f490f2ea9..90dea36dd539f378064c25871118008a7cab9950 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3825.  [bug]           Address sign extension bug in isc_regex_validate.
+                       [RT #35758]
+
 3824.  [bug]           A collision between two flag values could cause
                        problems with cache cleaning when SIT was enabled.
                        [RT #35858]
index 279bcdc437fbdcd2ce4abcd03ce22de2eb347e00..17b3afbe08dc6022d535538f7993e8a7f6fab205 100644 (file)
@@ -220,7 +220,7 @@ isc_regex_validate(const char *c) {
                                ++c;
                                switch (*c) {
                                case '.':       /* collating element */
-                                       if (range) --range;
+                                       if (range != 0) --range;
                                        ++c;
                                        state = parse_ce;
                                        seen_ce = ISC_FALSE;
@@ -255,11 +255,11 @@ isc_regex_validate(const char *c) {
                        default:
                        inside:
                                seen_char = ISC_TRUE;
-                               if (range == 2 && *c < range_start)
+                               if (range == 2 && (*c & 0xff) < range_start)
                                        FAIL("out of order range");
                                if (range != 0)
                                        --range;
-                               range_start = *c;
+                               range_start = *c & 0xff;
                                ++c;
                                break;
                        };