Skip to content

Commit 6a0035b

Browse files
committed
Merge branch 'PHP-8.3' into PHP-8.4
2 parents 6e82ae9 + e039aff commit 6a0035b

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

ext/spl/spl_directory.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ static inline HashTable *spl_filesystem_object_get_debug_info(zend_object *objec
636636
}
637637
if (intern->type == SPL_FS_DIR) {
638638
#ifdef HAVE_GLOB
639-
if (php_stream_is(intern->u.dir.dirp, &php_glob_stream_ops)) {
639+
if (intern->u.dir.dirp && php_stream_is(intern->u.dir.dirp ,&php_glob_stream_ops)) {
640640
ZVAL_STR_COPY(&tmp, intern->path);
641641
} else {
642642
ZVAL_FALSE(&tmp);

ext/spl/tests/gh14687.phpt

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
--TEST--
2+
GH-14687 segfault on debugging SplObjectStorage instance after __destruct.
3+
--CREDITS--
4+
YuanchengJiang
5+
--EXTENSIONS--
6+
phar
7+
--INI--
8+
phar.require_hash=0
9+
phar.readonly=0
10+
--FILE--
11+
<?php
12+
$fname = __DIR__ . '/gh14687.phar.zip';
13+
$phar = new Phar($fname);
14+
class HasDestructor {
15+
public function __destruct() {
16+
var_dump($GLOBALS['s']);
17+
}
18+
}
19+
$s = new SplObjectStorage();
20+
$s[$phar] = new HasDestructor();
21+
register_shutdown_function(function() {
22+
global $s;
23+
});
24+
?>
25+
--CLEAN--
26+
<?php
27+
@unlink(__DIR__ . '/gh14687.phar.zip');
28+
?>
29+
--EXPECT--
30+
object(SplObjectStorage)#2 (1) {
31+
["storage":"SplObjectStorage":private]=>
32+
array(1) {
33+
[0]=>
34+
array(2) {
35+
["obj"]=>
36+
object(Phar)#1 (3) {
37+
["pathName":"SplFileInfo":private]=>
38+
string(0) ""
39+
["glob":"DirectoryIterator":private]=>
40+
bool(false)
41+
["subPathName":"RecursiveDirectoryIterator":private]=>
42+
string(0) ""
43+
}
44+
["inf"]=>
45+
object(HasDestructor)#3 (0) {
46+
}
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)