diff options
| author | Stanislav Malyshev <stas@php.net> | 2011-01-30 08:54:53 +0000 |
|---|---|---|
| committer | Stanislav Malyshev <stas@php.net> | 2011-01-30 08:54:53 +0000 |
| commit | 5bb0a44e06a51737c6be17acd172168fbd9fc80d (patch) | |
| tree | 594806d6b63f160a12d47c1854120e3aebdc12df /ext/date/php_date.c | |
| parent | 147382033aec3ce8863e30524e8d175864047ed8 (diff) | |
| download | php-git-5bb0a44e06a51737c6be17acd172168fbd9fc80d.tar.gz | |
Fix bug #52808 (Segfault when specifying interval as two dates)
Diffstat (limited to 'ext/date/php_date.c')
| -rw-r--r-- | ext/date/php_date.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 82d74f8edc..15a31572d6 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -3456,8 +3456,20 @@ static int date_interval_initialize(timelib_rel_time **rt, /*const*/ char *forma php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad format (%s)", format); retval = FAILURE; } else { - *rt = p; - retval = SUCCESS; + if(p) { + *rt = p; + retval = SUCCESS; + } else { + if(b && e) { + timelib_update_ts(b, NULL); + timelib_update_ts(e, NULL); + *rt = timelib_diff(b, e); + retval = SUCCESS; + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to parse interval (%s)", format); + retval = FAILURE; + } + } } timelib_error_container_dtor(errors); return retval; |
