Skip to content

Commit d63a7aa

Browse files
committed
Merge branch 'PHP-7.2' into PHP-7.3
2 parents 58d3dd4 + 7d001af commit d63a7aa

File tree

3 files changed

+24
-37
lines changed

3 files changed

+24
-37
lines changed

ext/date/php_date.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4430,12 +4430,21 @@ PHP_FUNCTION(date_interval_create_from_date_string)
44304430
Z_PARAM_STR(time_str)
44314431
ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
44324432

4433-
php_date_instantiate(date_ce_interval, return_value);
4434-
44354433
time = timelib_strtotime(ZSTR_VAL(time_str), ZSTR_LEN(time_str), &err, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper);
4434+
4435+
if (err->error_count > 0) {
4436+
php_error_docref(NULL, E_WARNING, "Unknown or bad format (%s) at position %d (%c): %s", ZSTR_VAL(time_str),
4437+
err->error_messages[0].position, err->error_messages[0].character ? err->error_messages[0].character : ' ', err->error_messages[0].message);
4438+
RETVAL_FALSE;
4439+
goto cleanup;
4440+
}
4441+
4442+
php_date_instantiate(date_ce_interval, return_value);
44364443
diobj = Z_PHPINTERVAL_P(return_value);
44374444
diobj->diff = timelib_rel_time_clone(&time->relative);
44384445
diobj->initialized = 1;
4446+
4447+
cleanup:
44394448
timelib_time_dtor(time);
44404449
timelib_error_container_dtor(err);
44414450
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
--TEST--
2+
Test date_interval_create_from_date_string() function : nonsense data
3+
--FILE--
4+
<?php
5+
$i = date_interval_create_from_date_string("foobar");
6+
var_dump($i);
7+
?>
8+
--EXPECTF--
9+
Warning: date_interval_create_from_date_string(): Unknown or bad format (foobar) at position 0 (f): The timezone could not be found in the database in %sdate_interval_create_from_date_string_broken.php on line 2
10+
bool(false)

ext/date/tests/date_interval_create_from_date_string_nullparam.phpt

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,9 @@ Test date_interval_create_from_date_string() function : null parameter
44
Rodrigo Prado de Jesus <royopa [at] gmail [dot] com>
55
--FILE--
66
<?php
7-
$i = date_interval_create_from_date_string(null); //returns a empty object
7+
$i = date_interval_create_from_date_string(null);
88
var_dump($i);
99
?>
1010
--EXPECTF--
11-
object(DateInterval)#%d (16) {
12-
["y"]=>
13-
int(0)
14-
["m"]=>
15-
int(0)
16-
["d"]=>
17-
int(0)
18-
["h"]=>
19-
int(0)
20-
["i"]=>
21-
int(0)
22-
["s"]=>
23-
int(0)
24-
["f"]=>
25-
float(0)
26-
["weekday"]=>
27-
int(0)
28-
["weekday_behavior"]=>
29-
int(0)
30-
["first_last_day_of"]=>
31-
int(0)
32-
["invert"]=>
33-
int(0)
34-
["days"]=>
35-
int(0)
36-
["special_type"]=>
37-
int(0)
38-
["special_amount"]=>
39-
int(0)
40-
["have_weekday_relative"]=>
41-
int(0)
42-
["have_special_relative"]=>
43-
int(0)
44-
}
11+
Warning: date_interval_create_from_date_string(): Unknown or bad format () at position 0 ( ): Empty string in %sdate_interval_create_from_date_string_nullparam.php on line 2
12+
bool(false)

0 commit comments

Comments
 (0)