diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 3097e95e18a..10134c21e1e 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -187,7 +187,11 @@ static zend_object *spl_filesystem_object_new(zend_class_entry *class_type) { spl_filesystem_object *intern; - intern = ecalloc(1, sizeof(spl_filesystem_object) + zend_object_properties_size(class_type)); + intern = emalloc(sizeof(spl_filesystem_object) + zend_object_properties_size(class_type)); + /* Avoid initializing the entirety of spl_filesystem_object.u.dir.entry. */ + memset(intern, 0, + MAX(XtOffsetOf(spl_filesystem_object, u.dir.entry), + XtOffsetOf(spl_filesystem_object, u.file.escape) + sizeof(int))); /* intern->type = SPL_FS_INFO; done by set 0 */ intern->file_class = spl_ce_SplFileObject; intern->info_class = spl_ce_SplFileInfo;