From e6aeab1fc0fdfb28261540187f07eeb087e4ffe2 Mon Sep 17 00:00:00 2001 From: "Eloy Lafuente (stronk7)" Date: Thu, 10 Feb 2022 10:44:26 +0100 Subject: [PATCH] MDL-73826 mod_lti: Fix for Windows/PHP8 with empty curl responses Sometimes (detected with Windows, when running @ GHA), both the response and the error of a curl request to non-existing URL returns the empty string. In that case, we cannot call to DOMDocument::loadXML() because the 1st param cannot be empty. So here, whenever that happens, we are throwing the moodle_exception earlier, instead of waiting for the XML errors to be processed later. --- mod/lti/locallib.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mod/lti/locallib.php b/mod/lti/locallib.php index 7668e676631..b0e05eba707 100644 --- a/mod/lti/locallib.php +++ b/mod/lti/locallib.php @@ -4392,6 +4392,13 @@ function lti_load_cartridge($url, $map, $propertiesmap = array()) { $curl = new curl(); $response = $curl->get($url); + // Got a completely empty response (real or error), cannot process this with + // DOMDocument::loadXML() because it errors with ValueError. So let's throw + // the moodle_exception before waiting to examine the errors later. + if (trim($response) === '') { + throw new moodle_exception('errorreadingfile', '', '', $url); + } + // TODO MDL-46023 Replace this code with a call to the new library. $origerrors = libxml_use_internal_errors(true); $origentity = lti_libxml_disable_entity_loader(true);