time = timelib_strtotime(time_str, time_str_len, &err, DATE_TIMEZONEDB);
diobj = (php_interval_obj *) zend_object_store_get_object(return_value TSRMLS_CC);
diobj->diff = timelib_rel_time_clone(&time->relative);
+ diobj->initialized = 1;
timelib_time_dtor(time);
timelib_error_container_dtor(err);
}
zval *start, *end = NULL, *interval;
long recurrences = 0, options = 0;
char *isostr = NULL;
- int isostr_len;
+ int isostr_len = 0;
timelib_time *clone;
php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The ISO interval '%s' did not contain an end date or a recurrence count.", isostr);
}
- timelib_update_ts(dpobj->start, NULL);
+ if (dpobj->start) {
+ timelib_update_ts(dpobj->start, NULL);
+ }
if (dpobj->end) {
timelib_update_ts(dpobj->end, NULL);
}
--- /dev/null
+--TEST--
+Bug #44562 (Creating instance of DatePeriod crashes)
+--FILE--
+<?php
+date_default_timezone_set('Europe/Oslo');
+
+try
+{
+ $dp = new DatePeriod('2D');
+}
+catch ( Exception $e )
+{
+ echo $e->getMessage(), "\n";
+}
+
+$begin = new DateTime( "2008-07-20T22:44:53+0200" );
+$interval = DateInterval::createFromDateString( "1 day" );
+
+$dp = new DatePeriod( $begin, $interval, 10 );
+foreach ( $dp as $d )
+{
+ var_dump ($d->format( DATE_ISO8601 ) );
+}
+
+?>
+--EXPECT--
+DatePeriod::__construct(): Unknown or bad format (2D)
+string(24) "2008-07-20T22:44:53+0200"
+string(24) "2008-07-21T22:44:53+0200"
+string(24) "2008-07-22T22:44:53+0200"
+string(24) "2008-07-23T22:44:53+0200"
+string(24) "2008-07-24T22:44:53+0200"
+string(24) "2008-07-25T22:44:53+0200"
+string(24) "2008-07-26T22:44:53+0200"
+string(24) "2008-07-27T22:44:53+0200"
+string(24) "2008-07-28T22:44:53+0200"
+string(24) "2008-07-29T22:44:53+0200"
+string(24) "2008-07-30T22:44:53+0200"