LoggerConfiguratorIni::configure() and unexptected results from error_get_last()
--------------------------------------------------------------------------------

                 Key: LOG4PHP-117
                 URL: https://issues.apache.org/jira/browse/LOG4PHP-117
             Project: Log4php
          Issue Type: Bug
          Components: Code
    Affects Versions: 2.0
            Reporter: Maciej Mazur


If you invoke LoggerConfiguratorIni::configure() after there was any notice or 
warning in your PHP script, then LoggerConfiguratorIni will throw an exception 
even if there is no need (propably terminating execution)

284             public function configure(LoggerHierarchy $hierarchy, $url = 
'') {
285                     $properties = @parse_ini_file($url);
286                     if ($properties === false || count($properties) == 0) {
287                             $error = error_get_last();
288                         throw new LoggerException("LoggerConfiguratorIni: 
".$error['message']);
289                     }
290                     return $this->doConfigureProperties($properties, 
$hierarchy);
291             }

In line 287 it is checked if there was any error triggered by function 
parse_ini_file. Unfortunately function error_get_last() doesn't return an error 
triggered by execution of the last function. It returnes an error that ist most 
recent in global, even if it was already catched and taken care of. This is 
because there is no way to reset the state of the last error. It returns always 
the last triggered error. 
(http://www.php.net/manual/en/function.error-get-last.php#83608)

I attached the patch that "solves" this by triggering an empty error before 
parse_ini_file(), and the it is checked if the error has an empty message:

        public function configure(LoggerHierarchy $hierarchy, $url = '') {
                @trigger_error('');
                $properties = @parse_ini_file($url);
                if ($properties === false || count($properties) == 0) {
                        $error = error_get_last();
                        if ($error['message'] != '') {
                                throw new 
LoggerException("LoggerConfiguratorIni: ".$error['message']);
                        }
                }
                return $this->doConfigureProperties($properties, $hierarchy);
        }

This not very pretty but it works




-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to