]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Grow the lex token buffer in one more place
authorMark Andrews <marka@isc.org>
Mon, 28 Feb 2022 00:47:56 +0000 (11:47 +1100)
committerEvan Hunt <each@isc.org>
Wed, 2 Mar 2022 00:05:39 +0000 (16:05 -0800)
when parsing key pairs, if the '=' character fell at max_token
a protective INSIST preventing buffer overrun could be triggered.
Attempt to grow the buffer immediately before the INSIST.

Also removed an unnecessary INSIST on the opening double quote
of key buffer pair.

lib/isc/lex.c

index 69480410708f468a557f8b5384f7e02cdda382ff..6373a98393a8409851d26c62e4b6483b842ade8a 100644 (file)
@@ -674,6 +674,13 @@ isc_lex_gettoken(isc_lex_t *lex, unsigned int options, isc_token_t *tokenp) {
                case lexstate_string:
                        if (!escaped && c == '=' &&
                            (options & ISC_LEXOPT_VPAIR) != 0) {
+                               if (remaining == 0U) {
+                                       result = grow_data(lex, &remaining,
+                                                          &curr, &prev);
+                                       if (result != ISC_R_SUCCESS) {
+                                               goto done;
+                                       }
+                               }
                                INSIST(remaining > 0U);
                                *curr++ = c;
                                *curr = '\0';
@@ -686,7 +693,6 @@ isc_lex_gettoken(isc_lex_t *lex, unsigned int options, isc_token_t *tokenp) {
                        if (state == lexstate_vpairstart) {
                                if (c == '"' &&
                                    (options & ISC_LEXOPT_QVPAIR) != 0) {
-                                       INSIST(remaining > 0U);
                                        no_comments = true;
                                        state = lexstate_qvpair;
                                        break;