Compare commits

...
1 Commits
Author SHA1 Message Date
spirosmastorakis 704430ca07 table: Fixing Pit::erase crash if the Interest name contains implicit digest
Change-Id: I471023fc23ffaebe04d9668426b4c1b03e4973ac
Refs: #3608
2016-05-03 08:53:09 -08:00
3 changed files with 34 additions and 3 deletions

No files matched your search

+5 -2
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/** /**
* Copyright (c) 2014-2015, Regents of the University of California, * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents, * Arizona Board of Regents,
* Colorado State University, * Colorado State University,
* University Pierre & Marie Curie, Sorbonne University, * University Pierre & Marie Curie, Sorbonne University,
@@ -36,7 +36,9 @@ class NameTree;
namespace name_tree { namespace name_tree {
class Entry; class Entry;
} } // namespace name_tree
class Pit;
namespace pit { namespace pit {
@@ -183,6 +185,7 @@ private:
friend class nfd::NameTree; friend class nfd::NameTree;
friend class nfd::name_tree::Entry; friend class nfd::name_tree::Entry;
friend class nfd::Pit;
}; };
inline const Interest& inline const Interest&
+1 -1
View File
@@ -113,7 +113,7 @@ Pit::findAllDataMatches(const Data& data) const
void void
Pit::erase(shared_ptr<pit::Entry> pitEntry) 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)); BOOST_ASSERT(static_cast<bool>(nameTreeEntry));
nameTreeEntry->erasePitEntry(pitEntry); nameTreeEntry->erasePitEntry(pitEntry);
+28
View File
@@ -431,6 +431,34 @@ BOOST_AUTO_TEST_CASE(EraseNameTreeEntry)
BOOST_CHECK_EQUAL(nameTree.size(), nNameTreeEntriesBefore); 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) BOOST_AUTO_TEST_CASE(FindAllDataMatches)
{ {
Name nameA ("ndn:/A"); Name nameA ("ndn:/A");