I've done a bit more digging into the code and determined that the code in admin/includes/header.php is expecting getProjectVersion() to always return an array. The code in admin/includes/classes/VersionServer.php returns a string in the event of a CURL error. To correct this, change line 46 of admin/includes/classes/VersionServer.php from
Code:
return $this->formatCurlError($errno, $error);
to
Code:
return json_decode($this->formatCurlError($errno, $error), true);
To avoid incorrectly reporting that the version is current when in reality a CURL error was encountered, change lines 89-95 of admin/includes/header.php from
Code:
if (isset($newinfo['error'])) {
$isCurrent = true;
$versionCheckError = true;
} else {
$isCurrent = $versionServer->isProjectCurrent($newinfo);
}
to
Code:
if (isset($newinfo['error'])) {
$isCurrent = true;
$versionCheckError = true;
$new_version = '';
} else {
$isCurrent = $versionServer->isProjectCurrent($newinfo);
}
I found it strange to not report the error unless a version check was specifically requested via the vcheck flag was set, so I changed line 121 of admin/includes/header.php from
Code:
if (!$doVersionCheck || ($versionCheckError && $version_check_requested == true)) {
to
Code:
if (!$doVersionCheck || $versionCheckError) {
With these changes, a CURL error will result in 'Error: Could not contact Project Version Server' being displayed instead of 'v{.{ :: {';