From 5605d643890d711b0c554e35391e1b6a3bbc1743 Mon Sep 17 00:00:00 2001 From: Michael Aherne Date: Tue, 16 Jul 2024 14:39:02 +0100 Subject: [PATCH 1/2] MDL-82499 question: Fail if questionid does not exist. --- lib/questionlib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/questionlib.php b/lib/questionlib.php index bffcd5389c6..99a7a2ce6b5 100644 --- a/lib/questionlib.php +++ b/lib/questionlib.php @@ -1465,7 +1465,7 @@ function question_has_capability_on($questionorid, $cap, $notused = -1): bool { WHERE q.id = :id'; // Well, at least we tried. Seems that we really have to read from DB. - $question = $DB->get_record_sql($sql, ['id' => $questionid]); + $question = $DB->get_record_sql($sql, ['id' => $questionid], MUST_EXIST); } } From 0cf6f3a620a4d9b9a7d16db0527c2b7fb2d08f28 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Tue, 16 Jul 2024 17:35:08 +0100 Subject: [PATCH 2/2] MDL-82499 question: test for invalid question in capability check. --- lib/tests/questionlib_test.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/tests/questionlib_test.php b/lib/tests/questionlib_test.php index 2c8183455dc..a84d41fe126 100644 --- a/lib/tests/questionlib_test.php +++ b/lib/tests/questionlib_test.php @@ -2009,6 +2009,21 @@ class questionlib_test extends \advanced_testcase { question_has_capability_on('one', 'tag'); } + /** + * Test question_has_capability_on with an invalid question ID + */ + public function test_question_has_capability_on_invalid_question(): void { + try { + question_has_capability_on(42, 'tag'); + $this->fail('Expected exception'); + } catch (\moodle_exception $exception) { + $this->assertInstanceOf(\dml_missing_record_exception::class, $exception); + + // We also get debugging from initial attempt to load question data. + $this->assertDebuggingCalled(); + } + } + /** * Test of question_categorylist function. *