From 81a509d5bfca69c678e0c1eb66f6731db61c222c Mon Sep 17 00:00:00 2001 From: rub Date: Sat, 16 Feb 2008 13:22:47 +0000 Subject: Resolved issue 0000712: PWG-ERROR-VERSION on remote synchronization git-svn-id: http://piwigo.org/svn/branches/branch-1_7@2212 68402e56-0260-453c-a942-63ccdbb3a9ee --- include/common.inc.php | 3 ++- include/functions_xml.inc.php | 44 +++++++++++++++++++++++++++------ include/php_compat/preg_last_error.php | 45 ++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 include/php_compat/preg_last_error.php diff --git a/include/common.inc.php b/include/common.inc.php index f4fafa1c3..ef772747f 100644 --- a/include/common.inc.php +++ b/include/common.inc.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | PhpWebGallery - a PHP based picture gallery | // | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net | -// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net | +// | Copyright (C) 2003-2008 PhpWebGallery Team - http://phpwebgallery.net | // +-----------------------------------------------------------------------+ // | branch : BSF (Best So Far) // | file : $Id$ @@ -125,6 +125,7 @@ if (!defined('PHPWG_INSTALLED')) foreach( array( 'array_intersect_key', //PHP 5 >= 5.1.0RC1 'hash_hmac', //(hash) - enabled by default as of PHP 5.1.2 + 'preg_last_error', // PHP 5 >= 5.2.0 ) as $func) { if (!function_exists($func)) diff --git a/include/functions_xml.inc.php b/include/functions_xml.inc.php index 7c388d292..ba0f11737 100644 --- a/include/functions_xml.inc.php +++ b/include/functions_xml.inc.php @@ -2,10 +2,10 @@ // +-----------------------------------------------------------------------+ // | PhpWebGallery - a PHP based picture gallery | // | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net | -// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net | +// | Copyright (C) 2003-2008 PhpWebGallery Team - http://phpwebgallery.net | // +-----------------------------------------------------------------------+ // | branch : BSF (Best So Far) -// | file : $RCSfile$ +// | file : $Id$ // | last update : $Date$ // | last modifier : $Author$ // | revision : $Revision$ @@ -65,7 +65,7 @@ function encodeAttribute( $attribute, $value ) { return $attribute.'="'.htmlspecialchars($value, ENT_QUOTES).'" '; } - + // The function getChild returns the first child // exemple : getChild( "XXXYYY
", "tr" ) // returns "XXX" @@ -74,8 +74,19 @@ function getChild( $document, $node ) $regex = '/<'.$node.'(\s+'.ATT_REG.'="'.VAL_REG.'")*'; $regex.= '(\s*\/>|>.*<\/'.$node.'>)/U'; - preg_match( $regex, $document, $out ); - return $out[0]; + if + ( + preg_match( $regex, $document, $out ) + or + preg_last_error() == PREG_NO_ERROR + ) + { + return $out[0]; + } + else + { + die('getChild: error ['.preg_last_error().'] with preg_match function'); + } } // getChildren returns a list of the children identified by the $node @@ -89,14 +100,31 @@ function getChildren( $document, $node ) $regex = '/<'.$node.'(\s+'.ATT_REG.'="'.VAL_REG.'")*'; $regex.= '(\s*\/>|>.*<\/'.$node.'>)/U'; - preg_match_all( $regex, $document, $out ); - return $out[0]; + if + ( + preg_match_all( $regex, $document, $out ) + or + preg_last_error() == PREG_NO_ERROR + ) + { + return $out[0]; + } + else + { + die('getChild: error ['.preg_last_error().'] with preg_match_all function'); + } } - + // get_CodeXML places the content of a text file in a PHP variable and // return it. If the file can't be opened, returns false. function getXmlCode( $filename ) { + if (function_exists('ini_set')) + { + // limit must be growed with php5 and "big" listing file + ini_set("pcre.backtrack_limit", pow(2, 32)); + } + $file = fopen( $filename, 'r' ); if ( !$file ) { diff --git a/include/php_compat/preg_last_error.php b/include/php_compat/preg_last_error.php new file mode 100644 index 000000000..38dc1fd5b --- /dev/null +++ b/include/php_compat/preg_last_error.php @@ -0,0 +1,45 @@ += 5.2.0 +if (!defined('PREG_NO_ERROR')) + define('PREG_NO_ERROR', 0); +if (!defined('PREG_INTERNAL_ERROR')) + define('PREG_INTERNAL_ERROR', 1); +if (!defined('PREG_BACKTRACK_LIMIT_ERROR')) + define('PREG_BACKTRACK_LIMIT_ERROR', 2); +if (!defined('PREG_RECURSION_LIMIT_ERROR')) + define('PREG_RECURSION_LIMIT_ERROR', 3); +if (!defined('PREG_BAD_UTF8_ERROR')) + define('PREG_BAD_UTF8_ERROR', 4); + +function preg_last_error() +{ + return PREG_NO_ERROR; +} +?> \ No newline at end of file -- cgit v1.2.3