| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Only clone arg_info for inherited generic methods once a class-scope substitution actually changes a parameter or return type. A method-level generic return such as Box<O> still has generic side-table data, but it does not require a class-scope substitution when inherited by Box<string>. Leaving the original arg_info in place avoids creating an unnecessary substituted clone.
…dict
```
Direct leak of 52 byte(s) in 1 object(s) allocated from:
#0 0x7ff90cd2c161 in malloc (/usr/lib/libasan.so.8+0x12c161) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
#1 0x55de10c9a468 in tracked_malloc /work/php-8.4/Zend/zend_alloc.c:2973
#2 0x55de10c99443 in _emalloc /work/php-8.4/Zend/zend_alloc.c:2740
#3 0x55de102deb86 in zlib_create_dictionary_string /work/php-8.4/ext/zlib/zlib.c:836
#4 0x55de102e145a in zif_deflate_init /work/php-8.4/ext/zlib/zlib.c:1144
#5 0x55de10dcac6c in ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER /work/php-8.4/Zend/zend_vm_execute.h:1351
#6 0x55de10f2d69d in execute_ex /work/php-8.4/Zend/zend_vm_execute.h:58907
#7 0x55de10f41666 in zend_execute /work/php-8.4/Zend/zend_vm_execute.h:64334
php#8 0x55de110a6cf8 in zend_execute_script /work/php-8.4/Zend/zend.c:1934
php#9 0x55de10af0ddb in php_execute_script_ex /work/php-8.4/main/main.c:2577
php#10 0x55de10af128f in php_execute_script /work/php-8.4/main/main.c:2617
php#11 0x55de110ac5e1 in do_cli /work/php-8.4/sapi/cli/php_cli.c:935
php#12 0x55de110ae592 in main /work/php-8.4/sapi/cli/php_cli.c:1322
php#13 0x7ff90c027740 (/usr/lib/libc.so.6+0x27740) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
php#14 0x7ff90c027878 in __libc_start_main (/usr/lib/libc.so.6+0x27878) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
php#15 0x55de10005964 in _start (/work/php-8.4/sapi/cli/php+0x605964) (BuildId: 5f144db4e56ea623e070c56445fb1dfa3f8d085d)
SUMMARY: AddressSanitizer: 52 byte(s) leaked in 1 allocation(s).
```
Closes phpGH-22101.
#4) Only clone arg_info for inherited generic methods once a class-scope substitution actually changes a parameter or return type. A method-level generic return such as Box<O> still has generic side-table data, but it does not require a class-scope substitution when inherited by Box<string>. Leaving the original arg_info in place avoids creating an unnecessary substituted clone.
| Back | FazBrowse Home | New Git URL |
The failing CI job was Zend/tests/generics/inheritance/method/inherited_method_with_named_with_args_return.phpt.
That case has a method-level generic return Box<O>. The method still has generic side-table data, but inheriting it into StringBox extends Box<string> does not actually substitute any class-scope slot.
zend_substitute_trait_method_arg_info() was still cloning the arg_info block eagerly, even when no parameter or return type changed. This keeps the original arg_info unless a substitution actually writes into the cloned block.
Tests run:
make -j$(sysctl -n hw.ncpu) sapi/cli/php run-tests.php -q -d opcache.enable_cli=1 -d opcache.jit=function -d opcache.protect_memory=1 -d opcache.jit_buffer_size=64M Zend/tests/generics/inheritance/method/inherited_method_with_named_with_args_return.phpt sapi/cli/php run-tests.php -q -d opcache.enable_cli=1 -d opcache.jit=tracing -d opcache.protect_memory=1 -d opcache.jit_buffer_size=64M Zend/tests/generics/inheritance/method/inherited_method_with_named_with_args_return.phpt sapi/cli/php run-tests.php -q Zend/tests/generics/inheritance/method Zend/tests/generics/traits ext/reflection/tests/generics sapi/cli/php run-tests.php -q Zend/tests/generics ext/reflection/tests/generics