diff --git a/lib/filelib.php b/lib/filelib.php index a5294a9d81e..ca8506424d2 100644 --- a/lib/filelib.php +++ b/lib/filelib.php @@ -3712,7 +3712,8 @@ class curl { $this->reset_request_state_vars(); if ((defined('PHPUNIT_TEST') && PHPUNIT_TEST)) { - if ($mockresponse = array_pop(self::$mockresponses)) { + $mockresponse = array_pop(self::$mockresponses); + if ($mockresponse !== null) { $this->info = [ 'http_code' => 200 ]; return $mockresponse; } diff --git a/mod/lti/tests/locallib_test.php b/mod/lti/tests/locallib_test.php index bd639b17090..a9697fe9fb1 100644 --- a/mod/lti/tests/locallib_test.php +++ b/mod/lti/tests/locallib_test.php @@ -1945,6 +1945,20 @@ MwIDAQAB $this->assertEquals(16, $countwithproxyid); // 1 type, 15 proxies. } + /** + * Verify that empty curl responses lead to the proper moodle_exception, not to XML ValueError. + * + * @covers ::lti_load_cartridge() + */ + public function test_empty_reponse_lti_load_cartridge() { + // Mock the curl response to empty string, this is hardly + // reproducible in real life (only Windows + GHA). + \curl::mock_response(''); + + $this->expectException(\moodle_exception::class); + lti_load_cartridge('http://example.com/mocked/empty/response', []); + } + /** * Create an LTI Tool. *