diff --git a/phpBB/posting.php b/phpBB/posting.php index bc3e28ca43..736812cfaf 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -87,24 +87,25 @@ switch ($mode) $post_id = $request->variable('p', 0); if ($post_id) { - $topic_forum = array(); + $topic_forum = []; $sql = 'SELECT t.topic_id, t.forum_id FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p WHERE p.post_id = ' . $post_id . ' AND t.topic_id = p.topic_id'; $result = $db->sql_query($sql); - $topic_forum = $db->sql_fetchrow(); - $topic_id = (int) $topic_forum['topic_id']; - $forum_id = (int) $topic_forum['forum_id']; + $topic_forum = $db->sql_fetchrow($result); $db->sql_freeresult($result); } - if (!$post_id || !$topic_id || !$forum_id) + if (!$post_id || !$topic_forum) { $user->setup('posting'); trigger_error('NO_POST'); } + + $topic_id = (int) $topic_forum['topic_id']; + $forum_id = (int) $topic_forum['forum_id']; break; } diff --git a/tests/functional/posting_test.php b/tests/functional/posting_test.php index 30aab0afa1..363b5f4a18 100644 --- a/tests/functional/posting_test.php +++ b/tests/functional/posting_test.php @@ -300,4 +300,26 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case $crawler->filter('#preview .content')->html() ); } + + public function nonexistent_post_id_data() + { + $nonexistent_post_id = 999999; // Random value + return [ + ['edit', $nonexistent_post_id], + ['delete', $nonexistent_post_id], + ['quote', $nonexistent_post_id], + ['soft_delete', $nonexistent_post_id], + ]; + } + + /** + * @dataProvider nonexistent_post_id_data + */ + public function test_nonexistent_post_id($mode, $nonexistent_post_id) + { + $this->add_lang('posting'); + $this->login(); + $crawler = self::request('GET', "posting.php?mode={$mode}&p={$nonexistent_post_id}&sid={$this->sid}"); + $this->assertContainsLang('NO_POST', $crawler->text()); + } }