From: JINMEI Tatuya Date: Wed, 25 Jul 2012 22:25:39 +0000 (-0700) Subject: [2095] rejected RRSIG in start() X-Git-Tag: trac2351_base~137^2~4^2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=143fe6f4b2a3ad5828d3be960d940b7bfada888f;p=thirdparty%2Fkea.git [2095] rejected RRSIG in start() --- diff --git a/src/lib/datasrc/memory/rdata_encoder.cc b/src/lib/datasrc/memory/rdata_encoder.cc index 1b31c4aee6..5115c4f197 100644 --- a/src/lib/datasrc/memory/rdata_encoder.cc +++ b/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; diff --git a/src/lib/datasrc/memory/rdata_encoder.h b/src/lib/datasrc/memory/rdata_encoder.h index 74f1c4b9c8..2ff3fd526c 100644 --- a/src/lib/datasrc/memory/rdata_encoder.h +++ b/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 diff --git a/src/lib/datasrc/memory/tests/rdata_encoder_unittest.cc b/src/lib/datasrc/memory/tests/rdata_encoder_unittest.cc index 49a5b9f7c6..2d386eba02 100644 --- a/src/lib/datasrc/memory/tests/rdata_encoder_unittest.cc +++ b/src/lib/datasrc/memory/tests/rdata_encoder_unittest.cc @@ -128,8 +128,10 @@ protected: const vector& 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 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