Skip to content

Commit f413a77

Browse files
Chuan Masmalyshev
authored andcommitted
Fix #66942: openssl_seal() memory leak
Fix #66952: memory leak in openssl_open()
1 parent 99b01fb commit f413a77

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

ext/openssl/openssl.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4865,6 +4865,7 @@ PHP_FUNCTION(openssl_seal)
48654865

48664866
if (!EVP_EncryptInit(&ctx,cipher,NULL,NULL)) {
48674867
RETVAL_FALSE;
4868+
EVP_CIPHER_CTX_cleanup(&ctx);
48684869
goto clean_exit;
48694870
}
48704871

@@ -4875,10 +4876,12 @@ PHP_FUNCTION(openssl_seal)
48754876
#endif
48764877
/* allocate one byte extra to make room for \0 */
48774878
buf = emalloc(data_len + EVP_CIPHER_CTX_block_size(&ctx));
4879+
EVP_CIPHER_CTX_cleanup(&ctx);
48784880

48794881
if (!EVP_SealInit(&ctx, cipher, eks, eksl, NULL, pkeys, nkeys) || !EVP_SealUpdate(&ctx, buf, &len1, (unsigned char *)data, data_len)) {
48804882
RETVAL_FALSE;
48814883
efree(buf);
4884+
EVP_CIPHER_CTX_cleanup(&ctx);
48824885
goto clean_exit;
48834886
}
48844887

@@ -4911,6 +4914,7 @@ PHP_FUNCTION(openssl_seal)
49114914
efree(buf);
49124915
}
49134916
RETVAL_LONG(len1 + len2);
4917+
EVP_CIPHER_CTX_cleanup(&ctx);
49144918

49154919
clean_exit:
49164920
for (i=0; i<nkeys; i++) {
@@ -4969,25 +4973,21 @@ PHP_FUNCTION(openssl_open)
49694973
if (EVP_OpenInit(&ctx, cipher, (unsigned char *)ekey, ekey_len, NULL, pkey) && EVP_OpenUpdate(&ctx, buf, &len1, (unsigned char *)data, data_len)) {
49704974
if (!EVP_OpenFinal(&ctx, buf + len1, &len2) || (len1 + len2 == 0)) {
49714975
efree(buf);
4972-
if (keyresource == -1) {
4973-
EVP_PKEY_free(pkey);
4974-
}
4975-
RETURN_FALSE;
4976+
RETVAL_FALSE;
4977+
} else {
4978+
zval_dtor(opendata);
4979+
buf[len1 + len2] = '\0';
4980+
ZVAL_STRINGL(opendata, erealloc(buf, len1 + len2 + 1), len1 + len2, 0);
4981+
RETVAL_TRUE;
49764982
}
49774983
} else {
49784984
efree(buf);
4979-
if (keyresource == -1) {
4980-
EVP_PKEY_free(pkey);
4981-
}
4982-
RETURN_FALSE;
4985+
RETVAL_FALSE;
49834986
}
49844987
if (keyresource == -1) {
49854988
EVP_PKEY_free(pkey);
49864989
}
4987-
zval_dtor(opendata);
4988-
buf[len1 + len2] = '\0';
4989-
ZVAL_STRINGL(opendata, erealloc(buf, len1 + len2 + 1), len1 + len2, 0);
4990-
RETURN_TRUE;
4990+
EVP_CIPHER_CTX_cleanup(&ctx);
49914991
}
49924992
/* }}} */
49934993

0 commit comments

Comments
 (0)