BIND 10 trac2389, updated. 38c66b96176dc01a73f6d080728ce7386db196a1 [2389] added test cases involving internal lexer error.

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Feb 25 22:07:47 UTC 2013


The branch, trac2389 has been updated
       via  38c66b96176dc01a73f6d080728ce7386db196a1 (commit)
       via  bd43cb2eaa1bce9b25f248399c768ef689104b91 (commit)
       via  ffa3d85c7a2471b3aa517578d1c79cc7261d3b35 (commit)
      from  ec7c54008a6d2f71c3907be615abba1bfe934d6b (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 38c66b96176dc01a73f6d080728ce7386db196a1
Author: JINMEI Tatuya <jinmei at isc.org>
Date:   Mon Feb 25 14:07:28 2013 -0800

    [2389] added test cases involving internal lexer error.

commit bd43cb2eaa1bce9b25f248399c768ef689104b91
Author: JINMEI Tatuya <jinmei at isc.org>
Date:   Mon Feb 25 14:02:56 2013 -0800

    [2389] added comment about use of isc::Exception in some cases

commit ffa3d85c7a2471b3aa517578d1c79cc7261d3b35
Author: JINMEI Tatuya <jinmei at isc.org>
Date:   Mon Feb 25 13:56:44 2013 -0800

    [2389] revised exception msg in case of unexpected nul character.
    
    also added commments about the intent.

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

Summary of changes:
 src/lib/dns/rdata/in_1/a_1.cc               |    6 +++++-
 src/lib/dns/rdata/in_1/aaaa_28.cc           |    6 ++++--
 src/lib/dns/tests/rdata_in_a_unittest.cc    |    5 +++++
 src/lib/dns/tests/rdata_in_aaaa_unittest.cc |    5 +++++
 src/lib/dns/tests/rdata_soa_unittest.cc     |    4 ++++
 5 files changed, 23 insertions(+), 3 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/dns/rdata/in_1/a_1.cc b/src/lib/dns/rdata/in_1/a_1.cc
index 4dbd2bc..c9ae65d 100644
--- a/src/lib/dns/rdata/in_1/a_1.cc
+++ b/src/lib/dns/rdata/in_1/a_1.cc
@@ -42,8 +42,12 @@ using namespace isc::util;
 namespace {
 void
 convertToIPv4Addr(const char* src, size_t src_len, uint32_t* dst) {
+    // This check specifically rejects invalid input that begins with valid
+    // address text followed by a nul character (and possibly followed by
+    // further garbage).  It cannot be detected by inet_pton().
     if (src_len != strlen(src)) {
-        isc_throw(InvalidRdataText, "Bad IN/A RDATA text: extra character: '"
+        isc_throw(InvalidRdataText,
+                  "Bad IN/A RDATA text: unexpected nul in string: '"
                   << src << "'");
     }
     const int result = inet_pton(AF_INET, src, dst);
diff --git a/src/lib/dns/rdata/in_1/aaaa_28.cc b/src/lib/dns/rdata/in_1/aaaa_28.cc
index fb1d8cc..3cbc501 100644
--- a/src/lib/dns/rdata/in_1/aaaa_28.cc
+++ b/src/lib/dns/rdata/in_1/aaaa_28.cc
@@ -40,9 +40,11 @@ using namespace isc::util;
 namespace {
 void
 convertToIPv6Addr(const char* src, size_t src_len, void* dst) {
+    // See a_1.cc for this check.
     if (src_len != strlen(src)) {
-        isc_throw(InvalidRdataText, "Bad IN/AAAA RDATA text: "
-                  "extra character: '" << src << "'");
+        isc_throw(InvalidRdataText,
+                  "Bad IN/AAAA RDATA text: unexpected nul in string: '"
+                  << src << "'");
     }
     const int result = inet_pton(AF_INET6, src, dst);
     if (result == 0) {
diff --git a/src/lib/dns/tests/rdata_in_a_unittest.cc b/src/lib/dns/tests/rdata_in_a_unittest.cc
index 8e851c1..ac05c2c 100644
--- a/src/lib/dns/tests/rdata_in_a_unittest.cc
+++ b/src/lib/dns/tests/rdata_in_a_unittest.cc
@@ -82,6 +82,11 @@ TEST_F(Rdata_IN_A_Test, createFromText) {
 
     // a valid address surrounded by parentheses; only okay with lexer
     checkFromTextIN_A("(192.0.2.1)", true, false);
+
+    // input that would cause lexer-specific error; it's bad text as an
+    // address so should result in the string version, too.
+    checkFromText<in::A, InvalidRdataText, MasterLexer::LexerError>(
+        ")192.0.2.1", rdata_in_a);
 }
 
 TEST_F(Rdata_IN_A_Test, createFromWire) {
diff --git a/src/lib/dns/tests/rdata_in_aaaa_unittest.cc b/src/lib/dns/tests/rdata_in_aaaa_unittest.cc
index 78b9929..82f75a8 100644
--- a/src/lib/dns/tests/rdata_in_aaaa_unittest.cc
+++ b/src/lib/dns/tests/rdata_in_aaaa_unittest.cc
@@ -83,6 +83,11 @@ TEST_F(Rdata_IN_AAAA_Test, createFromText) {
 
     // a valid address surrounded by parentheses; only okay with lexer
     checkFromTextIN_AAAA("(2001:db8::1234)", true, false);
+
+    // input that would cause lexer-specific error; it's bad text as an
+    // address so should result in the string version, too.
+    checkFromText<in::AAAA, InvalidRdataText, MasterLexer::LexerError>(
+        ")2001:db8::1234", rdata_in_aaaa);
 }
 
 TEST_F(Rdata_IN_AAAA_Test, createFromWire) {
diff --git a/src/lib/dns/tests/rdata_soa_unittest.cc b/src/lib/dns/tests/rdata_soa_unittest.cc
index c733d2d..d919329 100644
--- a/src/lib/dns/tests/rdata_soa_unittest.cc
+++ b/src/lib/dns/tests/rdata_soa_unittest.cc
@@ -53,6 +53,10 @@ protected:
 };
 
 TEST_F(Rdata_SOA_Test, createFromText) {
+    // Below we specify isc::Exception as a dummy value for the exception type
+    // in case it's not expected to throw an exception; the type isn't used
+    // in the check code.
+
     // A simple case.
     checkFromTextSOA<isc::Exception, isc::Exception>(
         "ns.example.com. root.example.com. 2010012601 3600 300 3600000 1200",



More information about the bind10-changes mailing list