	public static function evaluate_search_tree($tree, $join = 'AND', $callback)
	{
		$matches = false;

		foreach($tree as $i => $el)
		{
			$b = false;
			if($i === 'AND' || $i === 'OR')
			{
				$b = self::evaluate_search_tree($el, $i, $callback);
			}
			else if(isset($el['query']))
			{
				$b = call_user_func($callback, $el['query']);
				if($el['not'])
				{
					$b = !$b;
				}
			}
			else if(is_array($el))
			{
				$b = self::evaluate_search_tree($el, $join, $callback);
			}

			if($join == 'AND')
			{
				if(!$b)
				{
					return false;
				}
				$matches = true;
			}
			else if($join == 'OR')
			{
				if($b)
				{
					return true;
				}

				$matches = $matches || $b;

			}

		}

		return $matches;
	}
The software does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.