BIND 10 trac2374, updated. c6ceedc0a1137cf4f9db6d11d63f8e825d99b68e [2374] Comments for end of unnamed namespaces

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Nov 26 11:12:37 UTC 2012


The branch, trac2374 has been updated
       via  c6ceedc0a1137cf4f9db6d11d63f8e825d99b68e (commit)
       via  9904f524d6a3d1f83bfa0cf94751b323f64bc233 (commit)
       via  b7a45ac8c122152452dcfce2a57df332748075ca (commit)
       via  d337cce4951bc4585f4109823b64b64346d0d232 (commit)
      from  70a7eb4ae1843148a27c6ed054f15293f8b9e848 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit c6ceedc0a1137cf4f9db6d11d63f8e825d99b68e
Author: Jelte Jansen <jelte at isc.org>
Date:   Mon Nov 26 11:57:08 2012 +0100

    [2374] Comments for end of unnamed namespaces

commit 9904f524d6a3d1f83bfa0cf94751b323f64bc233
Author: Jelte Jansen <jelte at isc.org>
Date:   Mon Nov 26 11:48:48 2012 +0100

    [2374] Use correct type for base of strtoul()

commit b7a45ac8c122152452dcfce2a57df332748075ca
Author: Jelte Jansen <jelte at isc.org>
Date:   Mon Nov 26 11:43:46 2012 +0100

    [2374] Add tests for escapes in numbers that are really strings

commit d337cce4951bc4585f4109823b64b64346d0d232
Author: Jelte Jansen <jelte at isc.org>
Date:   Mon Nov 26 11:30:06 2012 +0100

    [2374] Fix comments in number tokens
    
    a number directly followed by ;comment was not parsed correctly

-----------------------------------------------------------------------

Summary of changes:
 src/lib/dns/master_lexer.cc                      |   11 +--
 src/lib/dns/tests/master_lexer_state_unittest.cc |   84 +++++++++++++++++++---
 2 files changed, 81 insertions(+), 14 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/dns/master_lexer.cc b/src/lib/dns/master_lexer.cc
index a3883d3..72220a7 100644
--- a/src/lib/dns/master_lexer.cc
+++ b/src/lib/dns/master_lexer.cc
@@ -30,7 +30,7 @@ namespace dns {
 
 namespace {
 typedef boost::shared_ptr<master_lexer_internal::InputSource> InputSourcePtr;
-}
+} // end unnamed namespace
 using namespace master_lexer_internal;
 
 struct MasterLexer::MasterLexerImpl {
@@ -160,7 +160,7 @@ const char* const error_text[] = {
     "unbalanced quotes"         // UNBALANCED_QUOTES
 };
 const size_t error_text_max_count = sizeof(error_text) / sizeof(error_text[0]);
-}
+} // end unnamed namespace
 
 std::string
 MasterLexer::Token::getErrorText() const {
@@ -252,7 +252,7 @@ const CRLF CRLF_STATE;
 const String STRING_STATE;
 const QString QSTRING_STATE;
 const Number NUMBER_STATE;
-}
+} // end unnamed namespace
 
 const State&
 State::getInstance(ID state_id) {
@@ -398,7 +398,7 @@ const State*
 Number::handle(MasterLexer& lexer) const {
     MasterLexer::Token& token = getLexerImpl(lexer)->token_;
     // Do we want to support octal and/or hex here?
-    const unsigned int base = 10;
+    const int base = 10;
 
     // It may yet turn out to be a string, so we first
     // collect all the data
@@ -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 548f2c4..83ae7cb 100644
--- a/src/lib/dns/tests/master_lexer_state_unittest.cc
+++ b/src/lib/dns/tests/master_lexer_state_unittest.cc
@@ -452,7 +452,7 @@ TEST_F(MasterLexerStateTest, brokenQuotedString) {
     EXPECT_EQ(Token::END_OF_FILE, s_crlf.getToken(lexer).getType());
 }
 
-TEST_F(MasterLexerStateTest, number) {
+TEST_F(MasterLexerStateTest, basicNumbers) {
     ss << "0 ";
     ss << "1 ";
     ss << "12345 ";
@@ -464,11 +464,10 @@ TEST_F(MasterLexerStateTest, number) {
                          // above)
     ss << "1000000000000000000 "; // overflows to 2808348672
     ss << "005 ";        // Leading zeroes are ignored
-    ss << "-1 ";         // Negative numbers are interpreted
-                         // as strings (unsigned integers only)
-    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);
 
     EXPECT_EQ(&s_number, State::start(lexer, common_options));
@@ -503,14 +502,81 @@ TEST_F(MasterLexerStateTest, number) {
     EXPECT_EQ(s_null, s_number.handle(lexer));
     EXPECT_EQ(5, s_number.getToken(lexer).getNumber());
 
+    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());
+}
+
+// Test tokens that look like (or start out as) numbers,
+// but turn out to be strings. Tests include escaped characters.
+TEST_F(MasterLexerStateTest, stringNumbers) {
+    ss << "-1 ";         // Negative numbers are interpreted
+                         // as strings (unsigned integers only)
+    ss << "123abc456 ";  // 'Numbers' containing non-digits should
+                         // be interpreted as strings
+    ss << "3scaped\\ space ";
+    ss << "3scaped\\\ttab ";
+    ss << "3scaped\\(paren ";
+    ss << "3scaped\\)close ";
+    ss << "3scaped\\;comment ";
+    ss << "3scaped\\\\ 8ackslash "; // second '\' shouldn't escape ' '
+
+    lexer.pushSource(ss);
+
     EXPECT_EQ(&s_string, State::start(lexer, common_options));
     EXPECT_EQ(s_null, s_string.handle(lexer));
     stringTokenCheck("-1", s_string.getToken(lexer), false);
 
     // Starts out as a number, but ends up being a string
     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_null, s_number.handle(lexer));
+    stringTokenCheck("123abc456", s_number.getToken(lexer), false);
+
+    EXPECT_EQ(&s_number, State::start(lexer, common_options));
+    EXPECT_EQ(s_null, s_number.handle(lexer)); // recognize str, see ' ' at end
+    stringTokenCheck("3scaped\\ space", s_number.getToken(lexer));
+
+    EXPECT_EQ(&s_number, State::start(lexer, common_options));
+    EXPECT_EQ(s_null, s_number.handle(lexer)); // recognize str, see ' ' at end
+    stringTokenCheck("3scaped\\\ttab", s_number.getToken(lexer));
+
+    EXPECT_EQ(&s_number, State::start(lexer, common_options));
+    EXPECT_EQ(s_null, s_number.handle(lexer)); // recognize str, see ' ' at end
+    stringTokenCheck("3scaped\\(paren", s_number.getToken(lexer));
+
+    EXPECT_EQ(&s_number, State::start(lexer, common_options));
+    EXPECT_EQ(s_null, s_number.handle(lexer)); // recognize str, see ' ' at end
+    stringTokenCheck("3scaped\\)close", s_number.getToken(lexer));
 
+    EXPECT_EQ(&s_number, State::start(lexer, common_options));
+    EXPECT_EQ(s_null, s_number.handle(lexer)); // recognize str, see ' ' at end
+    stringTokenCheck("3scaped\\;comment", s_number.getToken(lexer));
+
+    EXPECT_EQ(&s_number, State::start(lexer, common_options));
+    EXPECT_EQ(s_null, s_number.handle(lexer)); // recognize str, see ' ' in mid
+    stringTokenCheck("3scaped\\\\", s_number.getToken(lexer));
+
+    // Confirm the word that follows the escaped '\' is correctly recognized.
+    EXPECT_EQ(&s_number, State::start(lexer, common_options));
+    EXPECT_EQ(s_null, s_number.handle(lexer)); // recognize str, see ' ' at end
+    stringTokenCheck("8ackslash", s_number.getToken(lexer));
+
+    // 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());
 }
+
+} // end anonymous namespace
+



More information about the bind10-changes mailing list