]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2374] Fix comments in number tokens
authorJelte Jansen <jelte@isc.org>
Mon, 26 Nov 2012 10:30:06 +0000 (11:30 +0100)
committerJelte Jansen <jelte@isc.org>
Mon, 26 Nov 2012 10:30:06 +0000 (11:30 +0100)
a number directly followed by ;comment was not parsed correctly

src/lib/dns/master_lexer.cc
src/lib/dns/tests/master_lexer_state_unittest.cc

index a3883d3320d894305edd670a798417f546e969d9..22c085e4f2b76f35d0386b1f407971e6b531b59d 100644 (file)
@@ -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) {
index 548f2c4472baa5da23fc8e3bf115293e24d4eb4e..f15217b3f2966df16dcd09380ace3db491f3f168 100644 (file)
@@ -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());
 }
 
 }