Skip to content

Null pointer dereference in mb_ereg_search_getregs() after mb_eregi() invalidates regex cache #21036

@vi3tL0u1s

Description

@vi3tL0u1s

Description

The following code:

<?php
mb_ereg_search_init("a", "a");
mb_ereg_search_pos();
mb_eregi("a", "a");
mb_ereg_search_getregs();

Resulted in this output:

AddressSanitizer:DEADLYSIGNAL
=================================================================
==PID==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000080 (pc 0x... bp 0x... sp 0x... T0)
==PID==The signal is caused by a READ memory access.
==PID==Hint: address points to the zero page.
    #0 in onig_number_of_names (/lib/x86_64-linux-gnu/libonig.so.5)
    #1 in zif_mb_ereg_search_getregs ext/mbstring/php_mbregex.c:1532
    #2 in ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER Zend/zend_vm_execute.h:1355
    #3 in execute_ex Zend/zend_vm_execute.h:116469
    #4 in zend_execute Zend/zend_vm_execute.h:121962
    #5 in zend_execute_script Zend/zend.c:1980
    #6 in php_execute_script_ex main/main.c:2645
    #7 in php_execute_script main/main.c:2685
    #8 in do_cli sapi/cli/php_cli.c:951
    #9 in main sapi/cli/php_cli.c:1362

SUMMARY: AddressSanitizer: SEGV (/lib/x86_64-linux-gnu/libonig.so.5) in onig_number_of_names

Commit:

5f367b8a011b6d9d2ddac08f6ff6ad0dcd39a0c2

Build configuration:

./configure --enable-debug --enable-address-sanitizer --disable-shared --with-pic --enable-mbstring --with-zlib

PHP Version

PHP 8.6.0-dev (cli) (built: Jan 26 2026 00:15:37) (NTS DEBUG)
Copyright (c) The PHP Group
Zend Engine v4.6.0-dev, Copyright (c) Zend Technologies

Operating System

Ubuntu 22.04

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions