Commit bc105b59 authored by JINMEI Tatuya's avatar JINMEI Tatuya
Browse files

[1583] not directly related, intermediate update: reject null RRset in

Message::addRRset().
parent 05a6a866
...@@ -489,6 +489,10 @@ Message::getRRCount(const Section section) const { ...@@ -489,6 +489,10 @@ Message::getRRCount(const Section section) const {
void void
Message::addRRset(const Section section, RRsetPtr rrset, const bool sign) { 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) { if (impl_->mode_ != Message::RENDER) {
isc_throw(InvalidMessageOperation, isc_throw(InvalidMessageOperation,
"addRRset performed in non-render mode"); "addRRset performed in non-render mode");
......
...@@ -462,15 +462,19 @@ public: ...@@ -462,15 +462,19 @@ public:
/// This interface takes into account the RRSIG possibly attached to /// This interface takes into account the RRSIG possibly attached to
/// \c rrset. This interface design needs to be revisited later. /// \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 /// Note that \c addRRset() does not currently check for duplicate
/// data before inserting RRsets. The caller is responsible for /// data before inserting RRsets. The caller is responsible for
/// checking for these (see \c hasRRset() below). /// 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); void addRRset(const Section section, RRsetPtr rrset, bool sign = false);
/// \brief Determine whether the given section already has an RRset /// \brief Determine whether the given section already has an RRset
......
...@@ -324,6 +324,10 @@ TEST_F(MessageTest, badAddRRset) { ...@@ -324,6 +324,10 @@ TEST_F(MessageTest, badAddRRset) {
rrset_a), InvalidMessageOperation); rrset_a), InvalidMessageOperation);
// out-of-band section ID // out-of-band section ID
EXPECT_THROW(message_render.addRRset(bogus_section, rrset_a), OutOfRange); 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) { TEST_F(MessageTest, hasRRset) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment