[TikiWiki-commits] [Git][tikiwiki/tiki][27.x] [FIX] trackerlib: Guard get_tracker_field cache key against non-scalar values
"Domeshow Emmanuel \(@Domeshow\) via TikiWiki-cvs" <[email protected]>
| Newsgroups | gmane.comp.cms.tiki.cvs |
|---|---|
| Message-ID | <69b1dd6bbaaa9_3b189f203167f@gitlab-sidekiq-low-urgency-cpu-bound-v2-6d4b95ff96-mbt9t.mail> |
Domeshow Emmanuel pushed to branch 27.x at Tiki Wiki CMS Groupware / Tiki Commits: fa37a658 by Domeshow Emmanuel at 2026-03-11T23:16:04+02:00 [FIX] trackerlib: Guard get_tracker_field cache key against non-scalar values --- * [FIX] trackerlib: Guard get_tracker_field cache key against non-scalar values --- * [FIX] trackerlib: Guard get_tracker_field cache key against non-scalar values --- * [FIX] tracker plugins: Prevent array warnings with composite filters * [FIX] trackerlib: Skip invalid get_tracker_field lookup for composite filters See merge request tikiwiki/tiki!9632 (cherry picked from commit aa1c6e97f0dfe22a7815e6f3d5c8d0a59cfd2d45) See merge request tikiwiki/tiki!9735 (cherry picked from commit 86bec875926966ee5174b2f589028fa181f380d0) 8bbe264b [FIX] trackerlib: Guard get_tracker_field cache key against non-scalar values Co-authored-by: Domeshow Emmanuel <[email protected]> See merge request tikiwiki/tiki!9736 - - - - - 3 changed files: - lib/trackers/trackerlib.php - lib/wiki-plugins/wikiplugin_trackerfilter.php - lib/wiki-plugins/wikiplugin_trackerlist.php Changes: ===================================== lib/trackers/trackerlib.php ===================================== @@ -1390,6 +1390,7 @@ class TrackerLib extends TikiLib $fv = $filtervalue; $ev = $exactvalue; $ff = (int) $filterfield; + $ff_array = $filterfield; $nb_filtered_fields = 1; } else { $nb_filtered_fields = count($filterfield); @@ -1404,7 +1405,21 @@ class TrackerLib extends TikiLib $ev = ! empty($exactvalue[$i]) ? $exactvalue[$i] : null; $fv = ! empty($filtervalue[$i]) ? $filtervalue[$i] : null; } - $filter = $this->get_tracker_field($ff); + $isCompositeFilter = is_array($ff_array) + && ( + (isset($ff_array['sqlsearch']) && is_array($ff_array['sqlsearch'])) + || (isset($ff_array['usersearch']) && is_array($ff_array['usersearch'])) + ); + if ($isCompositeFilter) { + $filter = ['type' => null]; + } else { + $field = $this->get_tracker_field($ff); + if ($field) { + $filter = $field; + } else { + $filter = ['type' => null]; + } + } // Determine if field is an item list field and postpone filtering till later if so if ($filter["type"] == 'l' && isset($filter['options_array'][2]) && isset($filter['options_array'][2]) && isset($filter['options_array'][3])) { @@ -3953,9 +3968,12 @@ class TrackerLib extends TikiLib public function get_tracker_field($fieldIdOrPermName, $useCache = true) { static $cache = []; - if ($useCache && (is_string($fieldIdOrPermName) || is_int($fieldIdOrPermName)) && isset($cache[$fieldIdOrPermName])) { + $isCacheableKey = is_string($fieldIdOrPermName) || is_int($fieldIdOrPermName); + + if ($useCache && $isCacheableKey && isset($cache[$fieldIdOrPermName])) { return $cache[$fieldIdOrPermName]; } + if ((int)$fieldIdOrPermName > 0) { $res = $this->fields()->fetchFullRow(['fieldId' => (int)$fieldIdOrPermName]); } else { @@ -3971,7 +3989,9 @@ class TrackerLib extends TikiLib if (TikiLib::lib('tiki')->isMemoryLow()) { $cache = []; } - $cache[$fieldIdOrPermName] = $res; + if ($isCacheableKey) { + $cache[$fieldIdOrPermName] = $res; + } return $res; } } ===================================== lib/wiki-plugins/wikiplugin_trackerfilter.php ===================================== @@ -993,7 +993,17 @@ function wikiplugin_trackerFilter_build_urlquery($params) } $urlquery = []; foreach ($params['filterfield'] as $key => $filter) { - $filterfield[] = $filter; + if (is_array($filter)) { + if (! empty($filter['sqlsearch']) && is_array($filter['sqlsearch'])) { + $filterfield[] = '(' . implode(':', $filter['sqlsearch']) . ')'; + } elseif (! empty($filter['usersearch']) && is_array($filter['usersearch'])) { + $filterfield[] = '(' . implode(':', $filter['usersearch']) . ')'; + } else { + continue; + } + } else { + $filterfield[] = $filter; + } if (! empty($params['exactvalue'][$key]) && empty($params['filtervalue'][$key])) { $filtervalue[] = ''; $exactvalue[] = $params['exactvalue'][$key]; ===================================== lib/wiki-plugins/wikiplugin_trackerlist.php ===================================== @@ -1114,7 +1114,19 @@ function wikiplugin_trackerlist($data, $params) } if (! empty($filterfield) && ! empty($limit)) { - $limit = array_unique(array_merge($limit, $filterfield)); + $flattenedFilterFields = []; + foreach ($filterfield as $ff) { + if (is_array($ff)) { + if (! empty($ff['sqlsearch']) && is_array($ff['sqlsearch'])) { + $flattenedFilterFields = array_merge($flattenedFilterFields, $ff['sqlsearch']); + } elseif (! empty($ff['usersearch']) && is_array($ff['usersearch'])) { + $flattenedFilterFields = array_merge($flattenedFilterFields, $ff['usersearch']); + } + } else { + $flattenedFilterFields[] = $ff; + } + } + $limit = array_unique(array_merge($limit, $flattenedFilterFields)); } // for some reason if param popup is set but empty, the array contains 2 empty elements. We filter them out. @@ -2043,10 +2055,16 @@ function wikiplugin_trackerlist($data, $params) $catfilternotvalue = []; if (! empty($filterfield)) { foreach ($filterfield as $k => $ff) { - if (! empty($ff['usersearch'])) { + if (is_array($ff) && (! empty($ff['usersearch']) || ! empty($ff['sqlsearch']))) { + continue; + } + if (! is_scalar($ff)) { continue; } $filterfieldinfo = $trklib->get_tracker_field($ff); + if (! is_array($filterfieldinfo) || ! isset($filterfieldinfo['type'])) { + continue; + } if ($filterfieldinfo['type'] == 'e') { $catfilters[] = $k; if (! empty($filtervalue[$k]) && empty($exactvalue[$k])) { View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/fa37a6583c96d9f7519b82aff5c4a1605e29cdb1 -- View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/fa37a6583c96d9f7519b82aff5c4a1605e29cdb1 You're receiving this email because of your account on gitlab.com. Manage all notifications: https://gitlab.com/-/profile/notifications | Help: https://gitlab.com/help _______________________________________________ TikiWiki-cvs mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs