Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ PHP NEWS
. Invalid values now throw in Phar::mungServer() instead of being silently
ignored. (nielsdos)

- Reflection:
. Fixed bug GH-20217 (ReflectionClass::isIterable() incorrectly returns true
for classes with property hooks). (alexandre-daubois)

- Standard:
. Fixed bug GH-19926 (reset internal pointer earlier while splicing array
while COW violation flag is still set). (alexandre-daubois)
Expand Down
3 changes: 2 additions & 1 deletion ext/reflection/php_reflection.c
Original file line number Diff line number Diff line change
Expand Up @@ -5589,7 +5589,8 @@ ZEND_METHOD(ReflectionClass, isIterable)
RETURN_FALSE;
}

RETURN_BOOL(ce->get_iterator || instanceof_function(ce, zend_ce_traversable));
RETURN_BOOL((ce->get_iterator && ce->get_iterator != zend_hooked_object_get_iterator)
|| instanceof_function(ce, zend_ce_traversable));
}
/* }}} */

Expand Down
38 changes: 38 additions & 0 deletions ext/reflection/tests/ReflectionClass_isIterable_gh20217.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
--TEST--
GH-20217 (ReflectionClass::isIterable() should return false for classes with property hooks)
--FILE--
<?php

class ClassWithPropertyHooks
{
public string $name {
get => 'virtual';
}
}

class IterableClassWithPropertyHooks implements IteratorAggregate
{
public string $name {
get => 'virtual';
}

public function getIterator(): Traversable
{
return new ArrayIterator([]);
}
}

$classes = [
'ClassWithPropertyHooks' => false,
'IterableClassWithPropertyHooks' => true,
];

foreach ($classes as $className => $expected) {
$status = (new ReflectionClass($className)->isIterable() === $expected) ? 'PASS' : 'FAIL';
echo "$className: $status\n";
}

?>
--EXPECT--
ClassWithPropertyHooks: PASS
IterableClassWithPropertyHooks: PASS
4 changes: 2 additions & 2 deletions ext/uri/uri_parser_rfc3986.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ static zend_result php_uri_parser_rfc3986_scheme_write(void *uri, zval *value, z
}
}

ZEND_ATTRIBUTE_NONNULL zend_result php_uri_parser_rfc3986_userinfo_read(void *uri, php_uri_component_read_mode read_mode, zval *retval)
ZEND_ATTRIBUTE_NONNULL zend_result php_uri_parser_rfc3986_userinfo_read(php_uri_parser_rfc3986_uris *uri, php_uri_component_read_mode read_mode, zval *retval)
{
const UriUriA *uriparser_uri = get_uri_for_reading(uri, read_mode);

Expand All @@ -162,7 +162,7 @@ ZEND_ATTRIBUTE_NONNULL zend_result php_uri_parser_rfc3986_userinfo_read(void *ur
return SUCCESS;
}

zend_result php_uri_parser_rfc3986_userinfo_write(void *uri, zval *value, zval *errors)
zend_result php_uri_parser_rfc3986_userinfo_write(php_uri_parser_rfc3986_uris *uri, zval *value, zval *errors)
{
UriUriA *uriparser_uri = get_uri_for_writing(uri);
int result;
Expand Down
4 changes: 2 additions & 2 deletions ext/uri/uri_parser_rfc3986.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ PHPAPI extern const php_uri_parser php_uri_parser_rfc3986;

typedef struct php_uri_parser_rfc3986_uris php_uri_parser_rfc3986_uris;

zend_result php_uri_parser_rfc3986_userinfo_read(void *uri, php_uri_component_read_mode read_mode, zval *retval);
zend_result php_uri_parser_rfc3986_userinfo_write(void *uri, zval *value, zval *errors);
zend_result php_uri_parser_rfc3986_userinfo_read(php_uri_parser_rfc3986_uris *uri, php_uri_component_read_mode read_mode, zval *retval);
zend_result php_uri_parser_rfc3986_userinfo_write(php_uri_parser_rfc3986_uris *uri, zval *value, zval *errors);

php_uri_parser_rfc3986_uris *php_uri_parser_rfc3986_parse_ex(const char *uri_str, size_t uri_str_len, const php_uri_parser_rfc3986_uris *uriparser_base_url, bool silent);

Expand Down