Fix #18395: Fix regression in yii\helpers\BaseArrayHelper::filter() (allowing filtering arrays with numeric keys)

This commit is contained in:
Bizley
2020-12-22 20:35:51 +01:00
committed by GitHub
parent cffb129605
commit 02c77da812
3 changed files with 54 additions and 28 deletions

View File

@ -944,13 +944,17 @@ class BaseArrayHelper
$excludeFilters = [];
foreach ($filters as $filter) {
if ($filter[0] === '!') {
if (!is_string($filter) && !is_int($filter)) {
continue;
}
if (is_string($filter) && strpos($filter, '!') === 0) {
$excludeFilters[] = substr($filter, 1);
continue;
}
$nodeValue = $array; //set $array as root node
$keys = explode('.', $filter);
$keys = explode('.', (string) $filter);
foreach ($keys as $key) {
if (!array_key_exists($key, $nodeValue)) {
continue 2; //Jump to next filter
@ -971,7 +975,7 @@ class BaseArrayHelper
foreach ($excludeFilters as $filter) {
$excludeNode = &$result;
$keys = explode('.', $filter);
$keys = explode('.', (string) $filter);
$numNestedKeys = count($keys) - 1;
foreach ($keys as $i => $key) {
if (!array_key_exists($key, $excludeNode)) {