aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/includes/tree/nestedset.php11
-rw-r--r--tests/tree/nestedset_forum_insert_delete_test.php19
2 files changed, 30 insertions, 0 deletions
diff --git a/phpBB/includes/tree/nestedset.php b/phpBB/includes/tree/nestedset.php
index 2f17ebab02..4d851a87a8 100644
--- a/phpBB/includes/tree/nestedset.php
+++ b/phpBB/includes/tree/nestedset.php
@@ -181,9 +181,20 @@ abstract class phpbb_tree_nestedset implements phpbb_tree_interface
*/
protected function remove_item_from_nestedset($item_id)
{
+ $item_id = (int) $item_id;
+ if (!$item_id)
+ {
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
+ }
+
$items = $this->get_subtree_data($item_id);
$item_ids = array_keys($items);
+ if (empty($items) || !isset($items[$item_id]))
+ {
+ throw new OutOfBoundsException($this->message_prefix . 'INVALID_ITEM');
+ }
+
$this->remove_subset($item_ids, $items[$item_id]);
return $item_ids;
diff --git a/tests/tree/nestedset_forum_insert_delete_test.php b/tests/tree/nestedset_forum_insert_delete_test.php
index 1f901c7422..d0e9e02c2e 100644
--- a/tests/tree/nestedset_forum_insert_delete_test.php
+++ b/tests/tree/nestedset_forum_insert_delete_test.php
@@ -52,6 +52,25 @@ class phpbb_tests_tree_nestedset_forum_add_remove_test extends phpbb_tests_tree_
$this->assertEquals($expected, $this->db->sql_fetchrowset($result));
}
+ public function delete_throws_data()
+ {
+ return array(
+ array('Not an item', 0),
+ array('Item does not exist', 200),
+ );
+ }
+
+ /**
+ * @dataProvider delete_throws_data
+ *
+ * @expectedException OutOfBoundsException
+ * @expectedExceptionMessage FORUM_NESTEDSET_INVALID_ITEM
+ */
+ public function test_delete_throws($explain, $forum_id)
+ {
+ $this->set->delete($forum_id);
+ }
+
public function insert_data()
{
return array(