Edit report at https://bugs.php.net/bug.php?id=61930&edit=1

 ID:                 61930
 Updated by:         s...@php.net
 Reported by:        s...@php.net
 Summary:            openssl corrupts ssl key resource when using
                     openssl_get_publickey()
 Status:             Open
 Type:               Bug
 Package:            OpenSSL related
 Operating System:   *
 PHP Version:        5.4.2
 Block user comment: N
 Private report:     N

 New Comment:

The problem happens because php_openssl_evp_from_zval on receiving resource 
with 
public key, is doing just this:


if (resourceval) {
*resourceval = Z_LVAL_PP(val);
}

and then:

return (EVP_PKEY*)what;

while openssl_pkey_get_public() does this:

Z_TYPE_P(return_value) = IS_RESOURCE;
pkey = php_openssl_evp_from_zval(cert, 1, NULL, 1, &Z_LVAL_P(return_value) 
TSRMLS_CC);

so the refcount of the resource in return_value is never increased, even though 
it is assigned now to another variable. When the return_value is freed, so is 
the resource, thus corrupting data in $key.


Previous Comments:
------------------------------------------------------------------------
[2012-05-03 20:18:08] s...@php.net

Description:
------------
If openssl_get_publickey() is applied to a key resource, the resource that 
comes 
out of it has wrong refcount and if freed, the argument of 
openssl_get_publickey() gets freed too. 

Test script:
---------------
If we have a certificate in $cert and data in $data and valid signature in 
$sign, this works:


$key = openssl_get_publickey($cert);
var_dump(openssl_verify($data, $sig, $key));

however this does not:

$key = openssl_get_publickey($cert);
var_dump(openssl_get_publickey($key));
var_dump(openssl_verify($data, $sig, $key));

it produces errors like this:


Warning: openssl_verify(): 4 is not a valid OpenSSL X.509/key resource in 
/Users/smalyshev/osslbug.php on line 29

Warning: openssl_verify(): supplied key param cannot be coerced into a public 
key in /Users/smalyshev/osslbug.php on line 29




------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=61930&edit=1

Reply via email to