Browse Source

[2095] rejected RRSIG in start()

JINMEI Tatuya 13 years ago
parent
commit
143fe6f4b2

+ 4 - 0
src/lib/datasrc/memory/rdata_encoder.cc

@@ -407,6 +407,10 @@ RdataEncoder::~RdataEncoder() {
 
 void
 RdataEncoder::start(RRClass rrclass, RRType rrtype) {
+    if (rrtype == RRType::RRSIG()) {
+        isc_throw(BadValue, "RRSIG cannot be encoded as main RDATA type");
+    }
+
     impl_->encode_spec_ = &getRdataEncodeSpec(rrclass, rrtype);
     impl_->field_composer_.clearLocal(impl_->encode_spec_);
     impl_->rdata_count_ = 0;

+ 3 - 0
src/lib/datasrc/memory/rdata_encoder.h

@@ -80,6 +80,9 @@ public:
     /// \brief The destrcutor.
     ~RdataEncoder();
 
+    /// \brief TBD
+    ///
+    /// \throw BadValue RRSIG is specified as rrtype.
     void start(dns::RRClass rrclass, dns::RRType rrtype);
 
     /// \brief TBD

+ 9 - 2
src/lib/datasrc/memory/tests/rdata_encoder_unittest.cc

@@ -128,8 +128,10 @@ protected:
                      const vector<ConstRdataPtr>& rdata_list,
                      size_t expected_varlen_fields);
 
-    const ConstRdataPtr a_rdata_;     // commonly used RDATA
-    const ConstRdataPtr aaaa_rdata_;  // commonly used RDATA
+    // Some commonly used RDATA
+    const ConstRdataPtr a_rdata_;
+    const ConstRdataPtr aaaa_rdata_;
+
     RdataEncoder encoder_;
     vector<uint8_t> encoded_data_;
     MessageRenderer expected_renderer_;
@@ -333,6 +335,11 @@ TEST_F(RdataEncoderTest, badAddRdata) {
     encoder_.start(RRClass::IN(), RRType::DHCID());
     EXPECT_THROW(encoder_.addRdata(in::DHCID(buffer, encoded_data_.size())),
                                    RdataEncodingError);
+
+    // RRSIG cannot be used as the main RDATA type (can only be added as
+    // a signature for some other type of RDATAs).
+    EXPECT_THROW(encoder_.start(RRClass::IN(), RRType::RRSIG()),
+                 isc::BadValue);
 }
 
 // Note: in our implementation RRSIG is treated as opaque data (including