Skip to content

PDO OCI segfault in statement GC #18494

Closed
@mvorisek

Description

@mvorisek

Description

Backtrace:

$gdb -batch -ex run -ex bt --args php vendor/bin/phpunit --exclude-group none --no-coverage --fail-on-warning --fail-on-risky $(if vendor/bin/phpunit --version | grep -q '^PHPUnit 9\.'; then echo -v; else echo --fail-on-notice --fail-on-deprecation --display-notices --display-deprecations --display-warnings --display-errors --display-incomplete --display-skipped; fi)
  env:
    DB_DSN: pdo_oci:dbname=oracle/free
    DB_USER: system
    DB_PASSWORD: atk4_pass
    NLS_LANG: AMERICAN_AMERICA.AL32UTF8

warning: Error disabling address space randomization: Operation not permitted
PHPUnit 11.5.19 by Sebastian Bergmann and contributors.
Runtime:       PHP 8.3.20
Configuration: /__w/data/data/phpunit.xml.dist
Program received signal SIGSEGV, Segmentation fault.
0x00007fcc20f99908 in kpulitmp () from /usr/lib/oracle/21.1/client64/lib/libclntsh.so.21.1
#0  0x00007fcc20f99908 in kpulitmp () from /usr/lib/oracle/21.1/client64/lib/libclntsh.so.21.1
#1  0x00007fcc1d934f1f in oci_stmt_dtor () from /usr/local/lib/php/extensions/debug-non-zts-20230831/pdo_oci.so
#2  0x0000561ba909aaa9 in php_pdo_free_statement (stmt=0x7fcc1b9831c0) at /usr/src/php/ext/pdo/pdo_stmt.c:2139
#3  0x0000561ba909aba6 in pdo_dbstmt_free_storage (std=0x7fcc1b9832f8) at /usr/src/php/ext/pdo/pdo_stmt.c:2166
#4  0x0000561ba94ae726 in zend_gc_collect_cycles () at /usr/src/php/Zend/zend_gc.c:1938
#5  0x0000561ba93efb68 in zif_gc_collect_cycles (execute_data=0x7fcc25e1ac40, return_value=0x7ffdf03cbd50) at /usr/src/php/Zend/zend_builtin_functions.c:93
#6  0x0000561ba9412502 in ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER () at /usr/src/php/Zend/zend_vm_execute.h:1567
#7  0x0000561ba9491d28 in execute_ex (ex=0x7fcc25e17020) at /usr/src/php/Zend/zend_vm_execute.h:57266
#8  0x0000561ba9496646 in zend_execute (op_array=0x7fcc25e61140, return_value=0x0) at /usr/src/php/Zend/zend_vm_execute.h:61634
#9  0x0000561ba93cc203 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /usr/src/php/Zend/zend.c:1895
#10 0x0000561ba9310660 in php_execute_script (primary_file=0x7ffdf03cd540) at /usr/src/php/main/main.c:2529
#11 0x0000561ba955a259 in do_cli (argc=15, argv=0x7fcc264d9b20) at /usr/src/php/sapi/cli/php_cli.c:966
#12 0x0000561ba955b0a3 in main (argc=15, argv=0x7fcc264d9b20) at /usr/src/php/sapi/cli/php_cli.c:1341

Full repro code: https://github.com/atk4/data/tree/repro_oracle_83_segfault

Notes:

I tried to isolate the reproducer into a single file /wo phpunit, but it seems even merging the 2 tests into 1 prevent this bug.

Also this issue seems to be present with PDO OCI driver only. OCI8 and other PDO drivers are unaffected.

PHP Version

8.3.20

Operating System

Alpine

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions