In Joomla 6 there is a bug in in Joomla\Input\Input
public function getArray..
My test Code:
$app = Factory::getApplication();
print_r($app->input->get->getArray());
URL in browser:
../administrator/index.php?option=com_test&a[attributes]=attributes
An error has occurred.
0 Joomla\Filter\InputFilter::cleanAttributes(): Argument #1 ($attrSet) must be of type array, string given, called in C:\OSPanel\home\j6\libraries\vendor\joomla\filter\src\InputFilter.php on line 248
Call Stack
-- | -- | --
1 | () | JROOT\libraries\vendor\joomla\filter\src\InputFilter.php:527
2 | Joomla\Filter\InputFilter->cleanAttributes() | JROOT\libraries\vendor\joomla\filter\src\InputFilter.php:248
3 | Joomla\Filter\InputFilter->clean() | JROOT\libraries\vendor\joomla\input\src\Input.php:204
4 | Joomla\Input\Input->getArray() | JROOT\libraries\vendor\joomla\input\src\Input.php:196
5 | Joomla\Input\Input->getArray()
| Labels |
Added:
No Code Attached Yet
|
||
| Title |
|
||||||
Joomla 6 switched to using the framework Joomla\Input\Input implementation in place of the CMS input handling used in earlier versions.
This change exposed an issue in Input::getArray() when called without an explicit filter map. In this case, request values can be misinterpreted as filter names, leading to unexpected filtering behaviour and, in some cases, fatal errors (e.g. when values such as attributes are present).
The easiest fix might be to bring Joomla\CMS\Input\Input::getArray() and Joomla\CMS\Input\Input::getArrayRecursive() over to the framework.
The situation is even worse
My test Code:
$app = Factory::getApplication();
print_r($app->input->get->getArray());
URL in browser:
../administrator/index.php?option=com_test&a=int
Result:
Array ( [option] => com_test [a] => 0 )
URL in browser:
../administrator/index.php?option=com_test&a=bool
Result:
Array ( [option] => com_test [a] => 1 )
URL in browser:
../administrator/index.php?option=com_test&a=attributes
An error has occurred.
0 Joomla\Filter\InputFilter::cleanAttributes(): Argument #1 ($attrSet) must be of type array, string given, called in C:\OSPanel\home\j6\libraries\vendor\joomla\filter\src\InputFilter.php on line 248
Joomla 5 code
protected function getArrayRecursive(array $vars = [], $datasource = null, $defaultFilter = 'unknown', $recursion = false)
{
if (empty($vars) && \is_null($datasource)) {
$vars = $this->data;
} else {
if (!$recursion) {
$defaultFilter = null;
}
}
Joomla 6 code
public function getArray(array $vars = [], $datasource = null)
{
if (empty($vars) && $datasource === null) {
$vars = $this->data;
}
Bug in code
$results[$k] = $this->get($k, null, $filter);
changed to:
$results[$k] = $this->get($k, null, $v);