Browse Source

[2218] Fix NSEC3 RDATA check when salt length is 0

Mukund Sivaraman 12 years ago
parent
commit
5b1952368e

+ 6 - 1
src/lib/datasrc/memory/memory_client.cc

@@ -317,7 +317,12 @@ public:
 
 
             if ((nsec3_rdata.getHashalg() != nsec3_data->hashalg) ||
             if ((nsec3_rdata.getHashalg() != nsec3_data->hashalg) ||
                 (nsec3_rdata.getIterations() != nsec3_data->iterations) ||
                 (nsec3_rdata.getIterations() != nsec3_data->iterations) ||
-                (salt_data_2.size() != salt_len) ||
+                (salt_data_2.size() != salt_len)) {
+                isc_throw(AddError,
+                          "NSEC3 with inconsistent parameters: " <<
+                          rrset->toText());
+            }
+            if ((salt_len > 0) &&
                 (std::memcmp(&salt_data_2[0], salt_data, salt_len) != 0)) {
                 (std::memcmp(&salt_data_2[0], salt_data, salt_len) != 0)) {
                 isc_throw(AddError,
                 isc_throw(AddError,
                           "NSEC3 with inconsistent parameters: " <<
                           "NSEC3 with inconsistent parameters: " <<

+ 7 - 1
src/lib/datasrc/memory/tests/zone_finder_unittest.cc

@@ -249,7 +249,13 @@ public:
 
 
              if ((nsec3_rdata.getHashalg() != nsec3_data->hashalg) ||
              if ((nsec3_rdata.getHashalg() != nsec3_data->hashalg) ||
                  (nsec3_rdata.getIterations() != nsec3_data->iterations) ||
                  (nsec3_rdata.getIterations() != nsec3_data->iterations) ||
-                 (salt_data_2.size() != salt_len) ||
+                 (salt_data_2.size() != salt_len)) {
+                  isc_throw(isc::Unexpected,
+                            "NSEC3 with inconsistent parameters: " <<
+                            rrset->toText());
+             }
+
+             if ((salt_len > 0) &&
                  (std::memcmp(&salt_data_2[0], salt_data, salt_len) != 0)) {
                  (std::memcmp(&salt_data_2[0], salt_data, salt_len) != 0)) {
                   isc_throw(isc::Unexpected,
                   isc_throw(isc::Unexpected,
                             "NSEC3 with inconsistent parameters: " <<
                             "NSEC3 with inconsistent parameters: " <<