mirror of
https://github.com/php/php-src.git
synced 2024-09-22 18:37:25 +00:00
Fix #66942: openssl_seal() memory leak
Fix #66952: memory leak in openssl_open()
This commit is contained in:
parent
99b01fb3d7
commit
f413a77b3d
@ -4865,6 +4865,7 @@ PHP_FUNCTION(openssl_seal)
|
|||||||
|
|
||||||
if (!EVP_EncryptInit(&ctx,cipher,NULL,NULL)) {
|
if (!EVP_EncryptInit(&ctx,cipher,NULL,NULL)) {
|
||||||
RETVAL_FALSE;
|
RETVAL_FALSE;
|
||||||
|
EVP_CIPHER_CTX_cleanup(&ctx);
|
||||||
goto clean_exit;
|
goto clean_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4875,10 +4876,12 @@ PHP_FUNCTION(openssl_seal)
|
|||||||
#endif
|
#endif
|
||||||
/* allocate one byte extra to make room for \0 */
|
/* allocate one byte extra to make room for \0 */
|
||||||
buf = emalloc(data_len + EVP_CIPHER_CTX_block_size(&ctx));
|
buf = emalloc(data_len + EVP_CIPHER_CTX_block_size(&ctx));
|
||||||
|
EVP_CIPHER_CTX_cleanup(&ctx);
|
||||||
|
|
||||||
if (!EVP_SealInit(&ctx, cipher, eks, eksl, NULL, pkeys, nkeys) || !EVP_SealUpdate(&ctx, buf, &len1, (unsigned char *)data, data_len)) {
|
if (!EVP_SealInit(&ctx, cipher, eks, eksl, NULL, pkeys, nkeys) || !EVP_SealUpdate(&ctx, buf, &len1, (unsigned char *)data, data_len)) {
|
||||||
RETVAL_FALSE;
|
RETVAL_FALSE;
|
||||||
efree(buf);
|
efree(buf);
|
||||||
|
EVP_CIPHER_CTX_cleanup(&ctx);
|
||||||
goto clean_exit;
|
goto clean_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4911,6 +4914,7 @@ PHP_FUNCTION(openssl_seal)
|
|||||||
efree(buf);
|
efree(buf);
|
||||||
}
|
}
|
||||||
RETVAL_LONG(len1 + len2);
|
RETVAL_LONG(len1 + len2);
|
||||||
|
EVP_CIPHER_CTX_cleanup(&ctx);
|
||||||
|
|
||||||
clean_exit:
|
clean_exit:
|
||||||
for (i=0; i<nkeys; i++) {
|
for (i=0; i<nkeys; i++) {
|
||||||
@ -4969,25 +4973,21 @@ PHP_FUNCTION(openssl_open)
|
|||||||
if (EVP_OpenInit(&ctx, cipher, (unsigned char *)ekey, ekey_len, NULL, pkey) && EVP_OpenUpdate(&ctx, buf, &len1, (unsigned char *)data, data_len)) {
|
if (EVP_OpenInit(&ctx, cipher, (unsigned char *)ekey, ekey_len, NULL, pkey) && EVP_OpenUpdate(&ctx, buf, &len1, (unsigned char *)data, data_len)) {
|
||||||
if (!EVP_OpenFinal(&ctx, buf + len1, &len2) || (len1 + len2 == 0)) {
|
if (!EVP_OpenFinal(&ctx, buf + len1, &len2) || (len1 + len2 == 0)) {
|
||||||
efree(buf);
|
efree(buf);
|
||||||
if (keyresource == -1) {
|
RETVAL_FALSE;
|
||||||
EVP_PKEY_free(pkey);
|
} else {
|
||||||
}
|
zval_dtor(opendata);
|
||||||
RETURN_FALSE;
|
buf[len1 + len2] = '\0';
|
||||||
|
ZVAL_STRINGL(opendata, erealloc(buf, len1 + len2 + 1), len1 + len2, 0);
|
||||||
|
RETVAL_TRUE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
efree(buf);
|
efree(buf);
|
||||||
if (keyresource == -1) {
|
RETVAL_FALSE;
|
||||||
EVP_PKEY_free(pkey);
|
|
||||||
}
|
|
||||||
RETURN_FALSE;
|
|
||||||
}
|
}
|
||||||
if (keyresource == -1) {
|
if (keyresource == -1) {
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
}
|
}
|
||||||
zval_dtor(opendata);
|
EVP_CIPHER_CTX_cleanup(&ctx);
|
||||||
buf[len1 + len2] = '\0';
|
|
||||||
ZVAL_STRINGL(opendata, erealloc(buf, len1 + len2 + 1), len1 + len2, 0);
|
|
||||||
RETURN_TRUE;
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user