table: fix Pit::erase crash when Interest name contains implicit digest
refs #3608 Change-Id: I41e0cd327b9dcc5f2d3a83f4cebff40c2d302fc1
This commit is contained in:
committed by
Junxiao Shi
parent
e0d71b0bc0
commit
ff920303df
@@ -38,6 +38,8 @@ namespace name_tree {
|
||||
class Entry;
|
||||
} // namespace name_tree
|
||||
|
||||
class Pit;
|
||||
|
||||
namespace pit {
|
||||
|
||||
/** \brief an unordered collection of in-records
|
||||
@@ -198,6 +200,7 @@ private:
|
||||
|
||||
friend class nfd::NameTree;
|
||||
friend class nfd::name_tree::Entry;
|
||||
friend class nfd::Pit;
|
||||
};
|
||||
|
||||
inline const Interest&
|
||||
|
||||
@@ -113,7 +113,7 @@ Pit::findAllDataMatches(const Data& data) const
|
||||
void
|
||||
Pit::erase(shared_ptr<pit::Entry> pitEntry)
|
||||
{
|
||||
shared_ptr<name_tree::Entry> nameTreeEntry = m_nameTree.get(*pitEntry);
|
||||
shared_ptr<name_tree::Entry> nameTreeEntry = pitEntry->m_nameTreeEntry;
|
||||
BOOST_ASSERT(static_cast<bool>(nameTreeEntry));
|
||||
|
||||
nameTreeEntry->erasePitEntry(pitEntry);
|
||||
|
||||
@@ -347,6 +347,34 @@ BOOST_AUTO_TEST_CASE(EraseNameTreeEntry)
|
||||
BOOST_CHECK_EQUAL(nameTree.size(), nNameTreeEntriesBefore);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(EraseWithFullName)
|
||||
{
|
||||
shared_ptr<Data> data = makeData("/test");
|
||||
shared_ptr<Interest> interest = makeInterest(data->getFullName());
|
||||
|
||||
NameTree nameTree(16);
|
||||
Pit pit(nameTree);
|
||||
|
||||
BOOST_CHECK_EQUAL(pit.size(), 0);
|
||||
|
||||
BOOST_CHECK_EQUAL(pit.insert(*interest).second, true);
|
||||
BOOST_CHECK_EQUAL(pit.size(), 1);
|
||||
BOOST_CHECK(pit.find(*interest) != nullptr);
|
||||
|
||||
BOOST_CHECK_EQUAL(pit.insert(*interest).second, false);
|
||||
BOOST_CHECK_EQUAL(pit.size(), 1);
|
||||
shared_ptr<pit::Entry> pitEntry = pit.find(*interest);
|
||||
BOOST_REQUIRE(pitEntry != nullptr);
|
||||
|
||||
pit.erase(pitEntry);
|
||||
BOOST_CHECK_EQUAL(pit.size(), 0);
|
||||
BOOST_CHECK(pit.find(*interest) == nullptr);
|
||||
|
||||
BOOST_CHECK_EQUAL(pit.insert(*interest).second, true);
|
||||
BOOST_CHECK_EQUAL(pit.size(), 1);
|
||||
BOOST_CHECK(pit.find(*interest) != nullptr);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(FindAllDataMatches)
|
||||
{
|
||||
Name nameA ("ndn:/A");
|
||||
|
||||
Reference in New Issue
Block a user