Skip to content

Commit e7f1d8d

Browse files
committed
Disallow ArrayObject
1 parent 22f8a54 commit e7f1d8d

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

Zend/tests/weakrefs/weakmap_data_classes.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
Nested WeakMap for same object key
2+
WeakMaps disallow data classes
33
--FILE--
44
<?php
55

ext/spl/spl_array.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,12 @@ static void spl_array_set_array(zval *object, spl_array_object *intern, zval *ar
975975
ZSTR_VAL(Z_OBJCE_P(array)->name), ZSTR_VAL(intern->std.ce->name));
976976
return;
977977
}
978+
if (UNEXPECTED(Z_OBJCE_P(array)->ce_flags & ZEND_ACC_DATA_CLASS)) {
979+
zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0,
980+
"Data object of type %s is not compatible with %s",
981+
ZSTR_VAL(Z_OBJCE_P(array)->name), ZSTR_VAL(intern->std.ce->name));
982+
return;
983+
}
978984
zval_ptr_dtor(&intern->array);
979985
ZVAL_COPY(&intern->array, array);
980986
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
SPL: ArrayObject disallow data classes
3+
--FILE--
4+
<?php
5+
6+
data class DC {}
7+
8+
$dc = new DC();
9+
10+
try {
11+
new ArrayObject($dc);
12+
} catch (Exception $e) {
13+
echo $e->getMessage(), "\n";
14+
}
15+
16+
try {
17+
$ao = new ArrayObject([]);
18+
$ao->exchangeArray($dc);
19+
} catch (Exception $e) {
20+
echo $e->getMessage(), "\n";
21+
}
22+
23+
?>
24+
--EXPECT--
25+
Data object of type DC is not compatible with ArrayObject
26+
Data object of type DC is not compatible with ArrayObject

0 commit comments

Comments
 (0)