mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Fixed bu #50392 (date_create_from_format() enforces 6 digits for 'u' format character)
This commit is contained in:
parent
4e10081f8f
commit
d0f6848e66
2
NEWS
2
NEWS
@ -40,6 +40,8 @@ PHP NEWS
|
||||
seg fault). (davbrown4 at yahoo dot com, Felipe)
|
||||
- Fixed bug #50351 (performance regression handling objects, ten times slower
|
||||
in 5.3 than in 5.2). (Dmitry)
|
||||
- Fixed bug #50392 (date_create_from_format() enforces 6 digits for 'u'
|
||||
format character). (Ilia)
|
||||
- Fixed bug #50345 (nanosleep not detected properly on some solaris versions).
|
||||
(Jani)
|
||||
- Fixed bug #50340 (php.ini parser does not allow spaces in ini keys). (Jani)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Generated by re2c 0.13.5 on Wed Jul 29 16:20:12 2009 */
|
||||
/* Generated by re2c 0.13.5 on Mon Dec 14 07:41:45 2009 */
|
||||
#line 1 "ext/date/lib/parse_date.re"
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
@ -24086,15 +24086,15 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim
|
||||
add_pbf_error(s, "A two digit second could not be found", string, begin);
|
||||
}
|
||||
break;
|
||||
case 'u': /* six digit millisecond */
|
||||
case 'u': /* up to 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);
|
||||
if ((f = timelib_get_nr((char **) &ptr, 6)) == TIMELIB_UNSET || (ptr - tptr) < 1) {
|
||||
add_pbf_error(s, "At least a single digit millisecond could not be found", string, begin);
|
||||
} else {
|
||||
s->time->f = (f / 1000000);
|
||||
}
|
||||
|
@ -1943,15 +1943,15 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim
|
||||
add_pbf_error(s, "A two digit second could not be found", string, begin);
|
||||
}
|
||||
break;
|
||||
case 'u': /* six digit millisecond */
|
||||
case 'u': /* up to 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);
|
||||
if ((f = timelib_get_nr((char **) &ptr, 6)) == TIMELIB_UNSET || (ptr - tptr) < 1) {
|
||||
add_pbf_error(s, "At least a single digit millisecond could not be found", string, begin);
|
||||
} else {
|
||||
s->time->f = (f / 1000000);
|
||||
}
|
||||
|
63
ext/date/tests/bug50392.phpt
Normal file
63
ext/date/tests/bug50392.phpt
Normal file
@ -0,0 +1,63 @@
|
||||
--TEST--
|
||||
Bug #50392 date_create_from_format enforces 6 digits for 'u' format character
|
||||
--FILE--
|
||||
<?php
|
||||
date_default_timezone_set('Europe/Bratislava');
|
||||
|
||||
$base = '2009-03-01 18:00:00';
|
||||
|
||||
for ($i = 0; $i < 8; $i++) {
|
||||
var_dump(date_create_from_format('Y-m-d H:i:s.u', $base . '.' . str_repeat('1', $i)));
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(false)
|
||||
object(DateTime)#2 (3) {
|
||||
["date"]=>
|
||||
string(19) "2009-03-01 18:00:00"
|
||||
["timezone_type"]=>
|
||||
int(3)
|
||||
["timezone"]=>
|
||||
string(17) "Europe/Bratislava"
|
||||
}
|
||||
object(DateTime)#2 (3) {
|
||||
["date"]=>
|
||||
string(19) "2009-03-01 18:00:00"
|
||||
["timezone_type"]=>
|
||||
int(3)
|
||||
["timezone"]=>
|
||||
string(17) "Europe/Bratislava"
|
||||
}
|
||||
object(DateTime)#2 (3) {
|
||||
["date"]=>
|
||||
string(19) "2009-03-01 18:00:00"
|
||||
["timezone_type"]=>
|
||||
int(3)
|
||||
["timezone"]=>
|
||||
string(17) "Europe/Bratislava"
|
||||
}
|
||||
object(DateTime)#2 (3) {
|
||||
["date"]=>
|
||||
string(19) "2009-03-01 18:00:00"
|
||||
["timezone_type"]=>
|
||||
int(3)
|
||||
["timezone"]=>
|
||||
string(17) "Europe/Bratislava"
|
||||
}
|
||||
object(DateTime)#2 (3) {
|
||||
["date"]=>
|
||||
string(19) "2009-03-01 18:00:00"
|
||||
["timezone_type"]=>
|
||||
int(3)
|
||||
["timezone"]=>
|
||||
string(17) "Europe/Bratislava"
|
||||
}
|
||||
object(DateTime)#2 (3) {
|
||||
["date"]=>
|
||||
string(19) "2009-03-01 18:00:00"
|
||||
["timezone_type"]=>
|
||||
int(3)
|
||||
["timezone"]=>
|
||||
string(17) "Europe/Bratislava"
|
||||
}
|
||||
bool(false)
|
Loading…
Reference in New Issue
Block a user