mirror of
https://github.com/unraid/webgui.git
synced 2026-01-02 23:50:21 -06:00
fix: searchlink can error in the plugin check
The error occurred because of how searchLink() is called on line 49:
if ($support = searchLink($info, $url) ?: searchLink($info, newurl($url))) {
Here's the sequence of events that caused the issue:
1. First call: searchLink($info, $url) - This works fine if $info contains the JSON data from
/tmp/community.applications/tempFiles/templates.json
2. If first call returns falsy: The ?: operator (shorthand ternary) triggers the second call:
searchLink($info, newurl($url))
3. The problem: When the first searchLink() returns null or false, PHP's ?: operator evaluates
the second expression. However, if $info itself is null (which can happen if the JSON file
doesn't exist or is empty - see line 19 where readJson() returns [] for missing files), then
searchLink(null, newurl($url)) is called.
4. The crash: Inside searchLink(), when $db is null, calling count($db) throws the TypeError
because count() requires an array or Countable object, not null.
Root causes:
- The JSON file at /tmp/community.applications/tempFiles/templates.json might not exist or could
be corrupted
- The readJson() function returns an empty array [] for missing files, but if the JSON decode
fails, it could return null
- The code wasn't defensive against null values being passed to searchLink()
The fix adds is_array($db) check to ensure we only attempt to count when we have a valid array.
This commit is contained in:
@@ -24,7 +24,7 @@ function newurl($url) {
|
||||
return str_replace($oldURL,$newURL,$url);
|
||||
}
|
||||
function searchLink(&$db,$url) {
|
||||
if ($url) for ($i = 0; $i < count($db); $i++) if ( ($db[$i]['PluginURL']??null)==$url) return $db[$i]['Support']??null;
|
||||
if ($url && is_array($db)) for ($i = 0; $i < count($db); $i++) if ( ($db[$i]['PluginURL']??null)==$url) return $db[$i]['Support']??null;
|
||||
}
|
||||
|
||||
$type = $argv[1]??''; // plugin or language
|
||||
|
||||
Reference in New Issue
Block a user