From: Jelte Jansen Date: Mon, 26 Nov 2012 10:30:06 +0000 (+0100) Subject: [2374] Fix comments in number tokens X-Git-Tag: bind10-1.0.0-beta-release~46^2~27^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d337cce4951bc4585f4109823b64b64346d0d232;p=thirdparty%2Fkea.git [2374] Fix comments in number tokens a number directly followed by ;comment was not parsed correctly --- diff --git a/src/lib/dns/master_lexer.cc b/src/lib/dns/master_lexer.cc index a3883d3320..22c085e4f2 100644 --- a/src/lib/dns/master_lexer.cc +++ b/src/lib/dns/master_lexer.cc @@ -408,7 +408,8 @@ Number::handle(MasterLexer& lexer) const { bool escaped = false; while (true) { - const int c = getLexerImpl(lexer)->source_->getChar(); + const int c = getLexerImpl(lexer)->skipComment( + getLexerImpl(lexer)->source_->getChar(), escaped); if (getLexerImpl(lexer)->isTokenEnd(c, escaped)) { getLexerImpl(lexer)->source_->ungetChar(); if (digits_only) { diff --git a/src/lib/dns/tests/master_lexer_state_unittest.cc b/src/lib/dns/tests/master_lexer_state_unittest.cc index 548f2c4472..f15217b3f2 100644 --- a/src/lib/dns/tests/master_lexer_state_unittest.cc +++ b/src/lib/dns/tests/master_lexer_state_unittest.cc @@ -466,8 +466,12 @@ TEST_F(MasterLexerStateTest, number) { ss << "005 "; // Leading zeroes are ignored ss << "-1 "; // Negative numbers are interpreted // as strings (unsigned integers only) - ss << "123abc456"; // 'Numbers' containing non-digits should + ss << "123abc456 "; // 'Numbers' containing non-digits should // be interpreted as strings + ss << "42;asdf\n"; // Number with comment + ss << "37"; // Simple number again, here to make + // sure none of the above messed up + // the tokenizer lexer.pushSource(ss); @@ -511,6 +515,22 @@ TEST_F(MasterLexerStateTest, number) { EXPECT_EQ(&s_number, State::start(lexer, common_options)); EXPECT_EQ(s_null, s_string.handle(lexer)); stringTokenCheck("123abc456", s_string.getToken(lexer), false); + + EXPECT_EQ(&s_number, State::start(lexer, common_options)); + EXPECT_EQ(s_null, s_number.handle(lexer)); + EXPECT_EQ(42, s_number.getToken(lexer).getNumber()); + + EXPECT_EQ(s_null, State::start(lexer, common_options)); + EXPECT_TRUE(s_crlf.wasLastEOL(lexer)); + EXPECT_EQ(Token::END_OF_LINE, s_crlf.getToken(lexer).getType()); + + EXPECT_EQ(&s_number, State::start(lexer, common_options)); + EXPECT_EQ(s_null, s_number.handle(lexer)); + EXPECT_EQ(37, s_number.getToken(lexer).getNumber()); + + // If we continue we'll simply see the EOF + EXPECT_EQ(s_null, State::start(lexer, options)); + EXPECT_EQ(Token::END_OF_FILE, s_crlf.getToken(lexer).getType()); } }