From 22ec477ddff0d0fbbb2f62c0fa20cfde662a121f Mon Sep 17 00:00:00 2001 From: Pavel Shevaev Date: Wed, 12 Feb 2025 17:13:41 +0300 Subject: [PATCH] Improving BHL_REF validation by better splitting code by namespaces --- bhl.inc.php | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/bhl.inc.php b/bhl.inc.php index 7bb5cd1..4dde946 100644 --- a/bhl.inc.php +++ b/bhl.inc.php @@ -267,24 +267,25 @@ function bhl_validate_func_ref(string $module_file, string $func_full_name, arra if(!$module_src) throw new Exception("Bad module file '{$module_file}'"); + $ns_chunks = _bhl_split_by_namespaces($module_src); + $module_chunks = array(); if($namespace) { - $ns_chunks = _bhl_split_by_namespaces($module_src); - if(count($ns_chunks) == 0) - throw new Exception("No namespaces found in '$module_file'"); + if(!isset($ns_chunks[$namespace])) + throw new Exception("No namespace '$namespace' found in '$module_file'"); - foreach($ns_chunks as $ns => $ns_src) - { - if($ns === $namespace) - $module_chunks[] = $ns_src; - } - - if(count($module_chunks) == 0) - throw new Exception("Namespace '$namespace' for func '$func_full_name' not found in '$module_file'"); + foreach($ns_chunks[$namespace] as $ns_src) + $module_chunks[] = $ns_src; } else - $module_chunks[] = $module_src; + { + if(!isset($ns_chunks[''])) + throw new Exception("No global namespace found in '$module_file'"); + + foreach($ns_chunks[''] as $ns_src) + $module_chunks[] = $ns_src; + } $signature_pattern = ''; $signature_pattern .= '~func\s+'; @@ -346,11 +347,18 @@ function _bhl_split_by_namespaces(string $src) : array { $ns = trim(substr(ltrim($chunk), 9)); $body = $chunks[$i+1]; - $nss[$ns] = $body; + if(!isset($nss[$ns])) + $nss[$ns] = array(); + $nss[$ns][] = $body; $i+=2; } else + { + if(!isset($nss[''])) + $nss[''] = array(); + $nss[''][] = $chunk; ++$i; + } } return $nss;