derick                                   Wed, 29 Jul 2009 15:34:59 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=286515

Log:
- Fixed bug #45554 (Inconsistent behavior of the u format char).

Bug: http://bugs.php.net/45554 (Assigned) Inconsistent behavior of the u format 
char
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.c
    U   php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.re
    A   php/php-src/branches/PHP_5_3/ext/date/tests/bug45554.phpt
    U   php/php-src/trunk/ext/date/lib/parse_date.c
    U   php/php-src/trunk/ext/date/lib/parse_date.re
    A   php/php-src/trunk/ext/date/tests/bug45554.phpt

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2009-07-29 15:29:59 UTC (rev 286514)
+++ php/php-src/branches/PHP_5_3/NEWS   2009-07-29 15:34:59 UTC (rev 286515)
@@ -80,6 +80,7 @@
   (Sriram Natarajan)
 - Fixed bug #48182 (ssl handshake fails during asynchronous socket connection).
   (Sriram Natarajan)
+- Fixed bug #45554 (Inconsistent behavior of the u format char). (Derick)
 - Fixed bug #42434 (ImageLine w/ antialias = 1px shorter). (wojjie at gmail dot
   com, Kalle)


Modified: php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.c      2009-07-29 
15:29:59 UTC (rev 286514)
+++ php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.c      2009-07-29 
15:34:59 UTC (rev 286515)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Thu Dec 18 14:58:43 2008 */
+/* Generated by re2c 0.13.5 on Wed Jul 29 16:20:12 2009 */
 #line 1 "ext/date/lib/parse_date.re"
 /*
    +----------------------------------------------------------------------+
@@ -24086,10 +24086,18 @@
                                        add_pbf_error(s, "A two digit second 
could not be found", string, begin);
                                }
                                break;
-                       case 'u': /* five digit millisecond, with leading zero 
*/
-                               TIMELIB_CHECK_NUMBER;
-                               if ((s->time->f = timelib_get_nr((char **) 
&ptr, 5)) == TIMELIB_UNSET) {
-                                       add_pbf_error(s, "A five digit 
millisecond could not be found", string, begin);
+                       case 'u': /* six digit millisecond */
+                               {
+                                       double f;
+                                       char *tptr;
+
+                                       TIMELIB_CHECK_NUMBER;
+                                       tptr = ptr;
+                                       if ((f = timelib_get_nr((char **) &ptr, 
6)) == TIMELIB_UNSET || ptr - tptr != 6) {
+                                               add_pbf_error(s, "A six digit 
millisecond could not be found", string, begin);
+                                       } else {
+                                               s->time->f = (f / 1000000);
+                                       }
                                }
                                break;
                        case ' ': /* any sort of whitespace (' ' and \t) */

Modified: php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.re
===================================================================
--- php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.re     2009-07-29 
15:29:59 UTC (rev 286514)
+++ php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.re     2009-07-29 
15:34:59 UTC (rev 286515)
@@ -1943,10 +1943,18 @@
                                        add_pbf_error(s, "A two digit second 
could not be found", string, begin);
                                }
                                break;
-                       case 'u': /* five digit millisecond, with leading zero 
*/
-                               TIMELIB_CHECK_NUMBER;
-                               if ((s->time->f = timelib_get_nr((char **) 
&ptr, 5)) == TIMELIB_UNSET) {
-                                       add_pbf_error(s, "A five digit 
millisecond could not be found", string, begin);
+                       case 'u': /* six digit millisecond */
+                               {
+                                       double f;
+                                       char *tptr;
+
+                                       TIMELIB_CHECK_NUMBER;
+                                       tptr = ptr;
+                                       if ((f = timelib_get_nr((char **) &ptr, 
6)) == TIMELIB_UNSET || ptr - tptr != 6) {
+                                               add_pbf_error(s, "A six digit 
millisecond could not be found", string, begin);
+                                       } else {
+                                               s->time->f = (f / 1000000);
+                                       }
                                }
                                break;
                        case ' ': /* any sort of whitespace (' ' and \t) */

Added: php/php-src/branches/PHP_5_3/ext/date/tests/bug45554.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/date/tests/bug45554.phpt                   
        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/date/tests/bug45554.phpt   2009-07-29 
15:34:59 UTC (rev 286515)
@@ -0,0 +1,20 @@
+--TEST--
+Bug #45554 (Inconsistent behavior of the u format char)
+--INI--
+date.timezone=UTC
+--FILE--
+<?php
+$format = "m-d-Y H:i:s.u T";
+$d = date_create_from_format($format, "03-15-2005 12:22:29.000000 PST");
+echo $d->format($format), "\n";
+
+$d = date_create_from_format($format, "03-15-2005 12:22:29.001001 PST");
+echo $d->format($format), "\n";
+
+$d = date_create_from_format($format, "03-15-2005 12:22:29.0010 PST");
+var_dump( $d );
+?>
+--EXPECT--
+03-15-2005 12:22:29.000000 PST
+03-15-2005 12:22:29.001000 PST
+bool(false)

Modified: php/php-src/trunk/ext/date/lib/parse_date.c
===================================================================
--- php/php-src/trunk/ext/date/lib/parse_date.c 2009-07-29 15:29:59 UTC (rev 
286514)
+++ php/php-src/trunk/ext/date/lib/parse_date.c 2009-07-29 15:34:59 UTC (rev 
286515)
@@ -1,8 +1,8 @@
-/* Generated by re2c 0.13.5 on Thu Dec 18 15:50:45 2008 */
+/* Generated by re2c 0.13.5 on Wed Jul 29 16:31:12 2009 */
 #line 1 "ext/date/lib/parse_date.re"
 /*
    +----------------------------------------------------------------------+
-   | PHP Version 6                                                        |
+   | PHP Version 5                                                        |
    +----------------------------------------------------------------------+
    | Copyright (c) 1997-2006 The PHP Group                                |
    +----------------------------------------------------------------------+
@@ -24086,10 +24086,18 @@
                                        add_pbf_error(s, "A two digit second 
could not be found", string, begin);
                                }
                                break;
-                       case 'u': /* five digit millisecond, with leading zero 
*/
-                               TIMELIB_CHECK_NUMBER;
-                               if ((s->time->f = timelib_get_nr((char **) 
&ptr, 5)) == TIMELIB_UNSET) {
-                                       add_pbf_error(s, "A five digit 
millisecond could not be found", string, begin);
+                       case 'u': /* six digit millisecond */
+                               {
+                                       double f;
+                                       char *tptr;
+
+                                       TIMELIB_CHECK_NUMBER;
+                                       tptr = ptr;
+                                       if ((f = timelib_get_nr((char **) &ptr, 
6)) == TIMELIB_UNSET || ptr - tptr != 6) {
+                                               add_pbf_error(s, "A six digit 
millisecond could not be found", string, begin);
+                                       } else {
+                                               s->time->f = (f / 1000000);
+                                       }
                                }
                                break;
                        case ' ': /* any sort of whitespace (' ' and \t) */

Modified: php/php-src/trunk/ext/date/lib/parse_date.re
===================================================================
--- php/php-src/trunk/ext/date/lib/parse_date.re        2009-07-29 15:29:59 UTC 
(rev 286514)
+++ php/php-src/trunk/ext/date/lib/parse_date.re        2009-07-29 15:34:59 UTC 
(rev 286515)
@@ -1943,10 +1943,18 @@
                                        add_pbf_error(s, "A two digit second 
could not be found", string, begin);
                                }
                                break;
-                       case 'u': /* five digit millisecond, with leading zero 
*/
-                               TIMELIB_CHECK_NUMBER;
-                               if ((s->time->f = timelib_get_nr((char **) 
&ptr, 5)) == TIMELIB_UNSET) {
-                                       add_pbf_error(s, "A five digit 
millisecond could not be found", string, begin);
+                       case 'u': /* six digit millisecond */
+                               {
+                                       double f;
+                                       char *tptr;
+
+                                       TIMELIB_CHECK_NUMBER;
+                                       tptr = ptr;
+                                       if ((f = timelib_get_nr((char **) &ptr, 
6)) == TIMELIB_UNSET || ptr - tptr != 6) {
+                                               add_pbf_error(s, "A six digit 
millisecond could not be found", string, begin);
+                                       } else {
+                                               s->time->f = (f / 1000000);
+                                       }
                                }
                                break;
                        case ' ': /* any sort of whitespace (' ' and \t) */

Added: php/php-src/trunk/ext/date/tests/bug45554.phpt
===================================================================
--- php/php-src/trunk/ext/date/tests/bug45554.phpt                              
(rev 0)
+++ php/php-src/trunk/ext/date/tests/bug45554.phpt      2009-07-29 15:34:59 UTC 
(rev 286515)
@@ -0,0 +1,20 @@
+--TEST--
+Bug #45554 (Inconsistent behavior of the u format char)
+--INI--
+date.timezone=UTC
+--FILE--
+<?php
+$format = "m-d-Y H:i:s.u T";
+$d = date_create_from_format($format, "03-15-2005 12:22:29.000000 PST");
+echo $d->format($format), "\n";
+
+$d = date_create_from_format($format, "03-15-2005 12:22:29.001001 PST");
+echo $d->format($format), "\n";
+
+$d = date_create_from_format($format, "03-15-2005 12:22:29.0010 PST");
+var_dump( $d );
+?>
+--EXPECT--
+03-15-2005 12:22:29.000000 PST
+03-15-2005 12:22:29.001000 PST
+bool(false)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to