From: JINMEI Tatuya Date: Tue, 14 Feb 2012 01:13:23 +0000 (-0800) Subject: [1583] not directly related, intermediate update: reject null RRset in X-Git-Tag: trac2351_base~97^2~30^2~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bc105b59161101bb6cf757e5f863bb7a3c97e6cc;p=thirdparty%2Fkea.git [1583] not directly related, intermediate update: reject null RRset in Message::addRRset(). --- diff --git a/src/lib/dns/message.cc b/src/lib/dns/message.cc index b3e9229ae8..0db68c6198 100644 --- a/src/lib/dns/message.cc +++ b/src/lib/dns/message.cc @@ -489,6 +489,10 @@ Message::getRRCount(const Section section) const { void Message::addRRset(const Section section, RRsetPtr rrset, const bool sign) { + if (!rrset) { + isc_throw(InvalidParameter, + "NULL RRset is given to Message::addRRset"); + } if (impl_->mode_ != Message::RENDER) { isc_throw(InvalidMessageOperation, "addRRset performed in non-render mode"); diff --git a/src/lib/dns/message.h b/src/lib/dns/message.h index 47632cb3e4..33551c099e 100644 --- a/src/lib/dns/message.h +++ b/src/lib/dns/message.h @@ -462,15 +462,19 @@ public: /// This interface takes into account the RRSIG possibly attached to /// \c rrset. This interface design needs to be revisited later. /// - /// This method is only allowed in the \c RENDER mode; - /// if the \c Message is in other mode, an exception of class - /// InvalidMessageOperation will be thrown. - /// \c section must be a valid constant of the \c Section type; - /// otherwise, an exception of class \c OutOfRange will be thrown. - /// /// Note that \c addRRset() does not currently check for duplicate /// data before inserting RRsets. The caller is responsible for /// checking for these (see \c hasRRset() below). + /// + /// \throw InvalidParameter rrset is NULL + /// \throw InvalidMessageOperation The message is not in the \c RENDER + /// mode. + /// \throw OutOfRange \c section doesn't specify a valid \c Section value. + /// + /// \param section The message section to which the rrset is to be added + /// \param rrset The rrset to be added. Must not be NULL. + /// \param sign If true, and if \c rrset has associated RRSIGs, the + /// RRSIGs will also be added to the same section of the message. void addRRset(const Section section, RRsetPtr rrset, bool sign = false); /// \brief Determine whether the given section already has an RRset diff --git a/src/lib/dns/tests/message_unittest.cc b/src/lib/dns/tests/message_unittest.cc index c4d4984da8..c5bc7fd840 100644 --- a/src/lib/dns/tests/message_unittest.cc +++ b/src/lib/dns/tests/message_unittest.cc @@ -324,6 +324,10 @@ TEST_F(MessageTest, badAddRRset) { rrset_a), InvalidMessageOperation); // out-of-band section ID EXPECT_THROW(message_render.addRRset(bogus_section, rrset_a), OutOfRange); + + // NULL RRset + EXPECT_THROW(message_render.addRRset(Message::SECTION_ANSWER, RRsetPtr()), + InvalidParameter); } TEST_F(MessageTest, hasRRset) {