Bug #73933 [Asn->Csd]: error/segfault with ldap_mod_replace and opcache

From: Date: Fri, 20 Jan 2017 04:04:57 +0000
Subject: Bug #73933 [Asn->Csd]: error/segfault with ldap_mod_replace and opcache
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-206752@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73933&edit=1 ID: 73933 Updated by: laruence@php.net Reported by: ryan dot brothers at gmail dot com Summary: error/segfault with ldap_mod_replace and opcache -Status: Assigned +Status: Closed Type: Bug Package: opcache Operating System: Linux PHP Version: 7.1.0 -Assigned To: +Assigned To: laruence Block user comment: N Private report: N New Comment: it should be fixed Previous Comments: ------------------------------------------------------------------------ [2017-01-17 12:06:53] ryan dot brothers at gmail dot com laruence - Thank you for the quick fix. Could you please also check the ldap_modify_batch function? I think it's the same problem there with the segfault. A reproduce script is: <?php $ldap = ldap_connect('127.0.0.1', 5000); ldap_modify_batch($ldap, null, array()); ldap_close($ldap); ------------------------------------------------------------------------ [2017-01-17 07:35:55] laruence@php.net Automatic comment on behalf of laruence@gmail.com Revision: http://git.php.net/?p=php-src.git;a=commit;h=b28c2e20ca83ffb5dc9159d7d03f0baf55b0aeaf Log: Fixed bug #73933 (error/segfault with ldap_mod_replace and opcache) ------------------------------------------------------------------------ [2017-01-16 13:07:37] nikic@php.net @laruence: This only separates the outer array. The inner array(s) also need to be separated. You're right that using zval_get_string() here is inconvenient, because we'd have to release the strings later. ------------------------------------------------------------------------ [2017-01-16 12:32:25] ryan dot brothers at gmail dot com laruence - thanks, I'm still seeing the segfault or various errors such as "Invalid syntax" or "Encoding error" when repeatedly calling the script with your patch. It always works the first time, but not later runs. Using opcache.protect_memory, you should be able to reproduce the segfault in CLI without having a working LDAP server: php -n -d zend_extension=opcache.so -d opcache.enable_cli=1 -d opcache.protect_memory=1 ldap.php <?php define('AAA', 1); error_reporting(E_ALL); $ldap = ldap_connect('127.0.0.1', 5000); ldap_mod_replace($ldap, null, array( 'lockoutTime' => array(0), )); ldap_close($ldap); ------------------------------------------------------------------------ [2017-01-16 03:45:09] laruence@php.net @nikic didn't notice your comment, it can not be done by changing convert to zval_get_string, since it require an place to hold the zend_string(ldap using char * directly). so, separate array is a better way to fix this. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=73933 -- Edit this bug report at https://bugs.php.net/bug.php?id=73933&edit=1

« previous php.bugs (#206752) next »