ZF-10159: Ungreedy delimitter in Zend_Locale_Format::_parseDate

Issue Type: Bug Created: 2010-07-15T01:59:34.000+0000 Last Updated: 2010-08-08T02:41:53.000+0000 Status: Resolved Fix version(s): - 1.11.0 (02/Nov/10)

Reporter: Robert Kooistra (thepope90) Assignee: Thomas Weidner (thomas) Tags: - Zend_Locale

Related issues: Attachments:


Using the core of the Magento eCommerce system I found that the preg_match_all contains an ungreedy delimiter in the pattern that is supposed to be uppercase (since my Linux server is case sensitive).

When the 'u' is lowercase it throws the exception "No date part in '$date' found." whilest the date parameter is an actual date.

Info: File: \Zend\Locale\Format.php :857 Function: _parseDate Paramters given: $date: 2010-06-30 16:56:17 $options: Array ( [date_format] => yyyy-MM-dd HH:mm:ss [locale] => nl_NL [fix_date] => 1 [format_type] => iso [number_format] => [cache] => [disableCache] => [precision] => )

OS: CentOS PHP Version: 5.2.13


Posted by Ryan Mauger (bittarman) on 2010-07-15T02:07:23.000+0000

The lowercase 'u' in a pcre expression is not PCRE_UNGREEDY, it actually means to be utf8 compatible (PCRE8).

Could you confirm that your pcre lib was compiled with utf8 enabled? as the use of this modifier without utf8 being enabled when pcre is compiled will result in the match function returning an error rather than any matches.

You should be able to find this information in your phpinfo.

Posted by Robert Kooistra (thepope90) on 2010-07-15T02:20:57.000+0000

There is no info wether is was compiled with utf8 support or not.

All I could find in phpinfo is:

PCRE (Perl Compatible Regular Expressions) Support enabled PCRE Library Version 8.01 2010-01-19

php was compiled using: --with-pcre-regex=/usr/local

Posted by Thomas Weidner (thomas) on 2010-07-15T14:37:34.000+0000

There is no "ungreedy" operator which is used. Zend Framework uses for I18n within the complete framework the encoding UTF-8.

This pattern is available within PHP per default. And according to the manual it can not be switched off.

Please give some additional information for reproduction. Actually with the given informations a reproduction is not possible.

Posted by Robert Kooistra (thepope90) on 2010-07-16T01:48:24.000+0000

Well, I created a tiny bit of code to reproduce the exception:

And it throws this exception: Exception information:

Message: No date part in '2010-06-30 15:25:05' found. Stack trace:

0 /home///Framework/library/Zend/Date.php(1075): Zend_Date->_calculate('set', '2010-06-30 15:2...', 'yyyy-MM-dd HH:m...', 'nl_NL')

1 /home///Framework/library/Zend/Date.php(197): Zend_Date->set('2010-06-30 15:2...', 'yyyy-MM-dd HH:m...', 'nl_NL')

2 /home///Framework/application/controllers/IndexController.php(20): Zend_Date->__construct('2010-06-30 15:2...', 'yyyy-MM-dd HH:m...', 'nl_NL')

3 /home///Framework/library/Zend/Controller/Action.php(513): IndexController->indexAction()

4 /home///Framework/library/Zend/Controller/Dispatcher/Standard.php(289): Zend_Controller_Action->dispatch('indexAction')

5 /home///Framework/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))

6 /home///Framework/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()

7 /home///Framework/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()

8 /home///public_html/index.php(27): Zend_Application->run()

9 {main}

Request Parameters:

array ( 'controller' => 'index', 'action' => 'index', 'module' => 'default', )

Hope that is enough info.

As in the ticket: My server is CentOS 5 with PHP 5.2.13

Posted by Robert Kooistra (thepope90) on 2010-07-18T06:27:11.000+0000

it would seem that my server has NOT been configured with PCRE_UTF8. I have will try to recompile PCRE with UTF8 support. But would it be better to give a warning from the Zend Framework when PCRE are used and it is not supported?

I'll get back on this to let you know if it works.

Posted by Thomas Weidner (thomas) on 2010-08-08T02:41:53.000+0000

Now a notice is thrown when UTF-8 is not available.

Note that UTF-8 is available within vanilla php installations. Additionally it should be mentioned that the request could even work without an exception by PCRE because it depends on the given input how PCRE behaves.

Closing issue as fixed as there is not more which could be done

Have you found an issue?

See the Overview section for more details.


© 2006-2018 by Zend, a Rogue Wave Company. Made with by awesome contributors.

This website is built using zend-expressive and it runs on PHP 7.