Commit e474d3c99f9 for php.net
commit e474d3c99f91adf41323c332381b4e2096b35b13
Author: Niels Dossche <7771979+ndossche@users.noreply.github.com>
Date: Fri Jan 23 12:15:31 2026 +0100
Fix crash in openssl_pkey_get_details() when BIO_new() fails
PEM_write_bio_PUBKEY() cannot handle a NULL argument:
```
==10779==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000058 (pc 0x7f426f79db69 bp 0x7fff0ec17940 sp 0x7fff0ec17928 T0)
==10779==The signal is caused by a WRITE memory access.
==10779==Hint: address points to the zero page.
#0 0x7f426f79db69 in BIO_up_ref (/lib/x86_64-linux-gnu/libcrypto.so.3+0xedb69) (BuildId: 0698e1ff610cb3c6993dccbd82c1281b1b4c5ade)
#1 0x7f426f7a8ac2 (/lib/x86_64-linux-gnu/libcrypto.so.3+0xf8ac2) (BuildId: 0698e1ff610cb3c6993dccbd82c1281b1b4c5ade)
#2 0x7f426f87c6f0 (/lib/x86_64-linux-gnu/libcrypto.so.3+0x1cc6f0) (BuildId: 0698e1ff610cb3c6993dccbd82c1281b1b4c5ade)
#3 0x7f426f87caa6 in OSSL_ENCODER_to_bio (/lib/x86_64-linux-gnu/libcrypto.so.3+0x1ccaa6) (BuildId: 0698e1ff610cb3c6993dccbd82c1281b1b4c5ade)
#4 0x7f426f99dc5e in PEM_write_bio_PUBKEY (/lib/x86_64-linux-gnu/libcrypto.so.3+0x2edc5e) (BuildId: 0698e1ff610cb3c6993dccbd82c1281b1b4c5ade)
#5 0x5637ebd00530 in zif_openssl_pkey_get_details /work/php-src/ext/openssl/openssl.c:2308
#6 0x5637ecab7ed2 in zend_test_execute_internal /work/php-src/ext/zend_test/observer.c:306
#7 0x5637ecde024a in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER /work/php-src/Zend/zend_vm_execute.h:2154
#8 0x5637ecf40995 in execute_ex /work/php-src/Zend/zend_vm_execute.h:116519
#9 0x5637ecf558b0 in zend_execute /work/php-src/Zend/zend_vm_execute.h:121962
#10 0x5637ed0ba0ab in zend_execute_script /work/php-src/Zend/zend.c:1980
#11 0x5637ecaec8bb in php_execute_script_ex /work/php-src/main/main.c:2645
#12 0x5637ecaecccb in php_execute_script /work/php-src/main/main.c:2685
#13 0x5637ed0bfc16 in do_cli /work/php-src/sapi/cli/php_cli.c:951
#14 0x5637ed0c21e3 in main /work/php-src/sapi/cli/php_cli.c:1362
#15 0x7f426f3321c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 274eec488d230825a136fa9c4d85370fed7a0a5e)
#16 0x7f426f33228a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 274eec488d230825a136fa9c4d85370fed7a0a5e)
#17 0x5637ebc09b34 in _start (/work/php-src/build-dbg-asan/sapi/cli/php+0x609b34) (BuildId: eb0a8e6b6d683fbdf45156dfed4d76f9110252b9)
```
Closes GH-21015.
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index f8be531d8dd..3dd58f5591a 100644
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@ -5176,7 +5176,7 @@ PHP_FUNCTION(openssl_pkey_get_details)
EVP_PKEY *pkey = Z_OPENSSL_PKEY_P(key)->pkey;
BIO *out = BIO_new(BIO_s_mem());
- if (!PEM_write_bio_PUBKEY(out, pkey)) {
+ if (!out || !PEM_write_bio_PUBKEY(out, pkey)) {
BIO_free(out);
php_openssl_store_errors();
RETURN_FALSE;