From bbf599af383240b34ef9d1723dd4e62383a40b73 Mon Sep 17 00:00:00 2001 From: Valdis Murzins Date: Tue, 3 Mar 2020 20:35:53 +0200 Subject: [PATCH] ..F....... [ZBX-17180] fixed undefined index in maps for trigger elements with no permissions * commit '401b0aef712bacc872b35c0aa7cef4f40f236983': ..F....... [ZBX-17180] fixed typehints in changed functions ..F....... [ZBX-17180] fixed undefined index in maps for trigger elements with no permissions --- ChangeLog.d/bugfix/ZBX-17180 | 1 + .../classes/macros/CMacrosResolver.php | 35 ++++++++----------- .../classes/macros/CMacrosResolverHelper.php | 2 +- 3 files changed, 17 insertions(+), 21 deletions(-) create mode 100644 ChangeLog.d/bugfix/ZBX-17180 diff --git a/ChangeLog.d/bugfix/ZBX-17180 b/ChangeLog.d/bugfix/ZBX-17180 new file mode 100644 index 0000000000..26f840472a --- /dev/null +++ b/ChangeLog.d/bugfix/ZBX-17180 @@ -0,0 +1 @@ +..F....... [ZBX-17180] fixed undefined index in maps for trigger elements with no permissions (vmurzins) diff --git a/frontends/php/include/classes/macros/CMacrosResolver.php b/frontends/php/include/classes/macros/CMacrosResolver.php index ac2ec93e8d..783ba6f658 100644 --- a/frontends/php/include/classes/macros/CMacrosResolver.php +++ b/frontends/php/include/classes/macros/CMacrosResolver.php @@ -1706,9 +1706,9 @@ class CMacrosResolver extends CMacrosResolverGeneral { * * @return string */ - public function resolveMapLabelMacros($label, $replaceHosts = null) { + public function resolveMapLabelMacros($label, array $replaceHosts = []) { $pattern = '/(?P{'. - '('.ZBX_PREG_HOST_FORMAT.(($replaceHosts !== null) + '('.ZBX_PREG_HOST_FORMAT.($replaceHosts ? '|({('.self::PATTERN_HOST_INTERNAL.')'.self::PATTERN_MACRO_PARAM.'})' : '').'):'. ZBX_PREG_ITEM_KEY_FORMAT.'\.'. '(last|max|min|avg)\('. @@ -1717,7 +1717,7 @@ class CMacrosResolver extends CMacrosResolverGeneral { if (preg_match_all($pattern, $label, $matches) !== false && array_key_exists('macros', $matches)) { // $replaceHosts with key '0' is used for macros without reference. - if ($replaceHosts !== null && array_key_exists(0, $replaceHosts)) { + if (array_key_exists(0, $replaceHosts)) { $replaceHosts[''] = $replaceHosts[0]; unset($replaceHosts[0]); } @@ -1726,20 +1726,18 @@ class CMacrosResolver extends CMacrosResolverGeneral { foreach ($matches['macros'] as $expr) { $macro = $expr; - if ($replaceHosts !== null) { - // Search for macros with all possible indices. - foreach ($replaceHosts as $i => $host) { - $macroTmp = $macro; + // Search for macros with all possible indexes. + foreach ($replaceHosts as $i => $host) { + $macroTmp = $macro; - // Replace only macro in first position. - $macro = preg_replace('/{({HOSTNAME'.$i.'}|{HOST\.HOST'.$i.'}):(.*)}/U', - '{'.$host['host'].':$2}', $macro - ); + // Replace only macro in first position. + $macro = preg_replace('/{({HOSTNAME'.$i.'}|{HOST\.HOST'.$i.'}):(.*)}/U', + '{'.$host['host'].':$2}', $macro + ); - // Only one simple macro possible inside functional macro. - if ($macro !== $macroTmp) { - break; - } + // Only one simple macro possible inside functional macro. + if ($macro !== $macroTmp) { + break; } } @@ -2181,7 +2179,7 @@ class CMacrosResolver extends CMacrosResolverGeneral { } $matched_macros = $macros_by_selementid[$selid]; - $hosts_by_nr = null; + $hosts_by_nr = []; $trigger = null; $host = null; $map = null; @@ -2198,9 +2196,6 @@ class CMacrosResolver extends CMacrosResolverGeneral { if (array_key_exists($elementid, $triggers)) { $trigger = $triggers[$elementid]; - // Must be here for correct counting. - $hosts_by_nr = [0 => null]; - /** * Get all function ids from expression and link host data against position in expression. * @@ -2224,7 +2219,7 @@ class CMacrosResolver extends CMacrosResolverGeneral { $hostid = $hosts_by_itemids[$itemid]; if (array_key_exists($hostid, $hosts)) { - $hosts_by_nr[count($hosts_by_nr)] = $hosts[$hostid]; + $hosts_by_nr[count($hosts_by_nr) + 1] = $hosts[$hostid]; } } diff --git a/frontends/php/include/classes/macros/CMacrosResolverHelper.php b/frontends/php/include/classes/macros/CMacrosResolverHelper.php index b77d461d9a..066dba9774 100644 --- a/frontends/php/include/classes/macros/CMacrosResolverHelper.php +++ b/frontends/php/include/classes/macros/CMacrosResolverHelper.php @@ -525,7 +525,7 @@ class CMacrosResolverHelper { * * @return string */ - public static function resolveMapLabelMacros($label, $replaceHosts = null) { + public static function resolveMapLabelMacros($label, array $replaceHosts = []) { self::init(); return self::$macrosResolver->resolveMapLabelMacros($label, $replaceHosts); -- 2.17.1