Skip to content

Commit 035cb9d

Browse files
committed
PHPC-2089: Fix bson_value_t memory leaks in ClientEncryption methods
1 parent dc3973d commit 035cb9d

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

src/MongoDB/ClientEncryption.c

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -425,10 +425,11 @@ static mongoc_client_encryption_datakey_opts_t* phongo_clientencryption_datakey_
425425
static void phongo_clientencryption_create_datakey(php_phongo_clientencryption_t* clientencryption, zval* return_value, char* kms_provider, zval* options) /* {{{ */
426426
{
427427
mongoc_client_encryption_datakey_opts_t* opts;
428-
bson_value_t keyid;
428+
bson_value_t keyid = { 0 };
429429
bson_error_t error = { 0 };
430430

431431
opts = phongo_clientencryption_datakey_opts_from_zval(options);
432+
432433
if (!opts) {
433434
/* Exception already thrown */
434435
goto cleanup;
@@ -448,6 +449,8 @@ static void phongo_clientencryption_create_datakey(php_phongo_clientencryption_t
448449
if (opts) {
449450
mongoc_client_encryption_datakey_opts_destroy(opts);
450451
}
452+
453+
bson_value_destroy(&keyid);
451454
} /* }}} */
452455

453456
static mongoc_client_encryption_encrypt_opts_t* phongo_clientencryption_encrypt_opts_from_zval(zval* options) /* {{{ */
@@ -461,14 +464,17 @@ static mongoc_client_encryption_encrypt_opts_t* phongo_clientencryption_encrypt_
461464
}
462465

463466
if (php_array_existsc(options, "keyId")) {
464-
bson_value_t keyid;
467+
bson_value_t keyid = { 0 };
465468

466469
php_phongo_zval_to_bson_value(php_array_fetchc(options, "keyId"), PHONGO_BSON_NONE, &keyid);
470+
467471
if (EG(exception)) {
472+
bson_value_destroy(&keyid);
468473
goto cleanup;
469474
}
470475

471476
mongoc_client_encryption_encrypt_opts_set_keyid(opts, &keyid);
477+
bson_value_destroy(&keyid);
472478
}
473479

474480
if (php_array_existsc(options, "keyAltName")) {
@@ -510,12 +516,14 @@ static mongoc_client_encryption_encrypt_opts_t* phongo_clientencryption_encrypt_
510516
static void phongo_clientencryption_encrypt(php_phongo_clientencryption_t* clientencryption, zval* zvalue, zval* zciphertext, zval* options) /* {{{ */
511517
{
512518
mongoc_client_encryption_encrypt_opts_t* opts;
513-
bson_value_t ciphertext, value;
514-
bson_error_t error = { 0 };
519+
bson_value_t ciphertext = { 0 };
520+
bson_value_t value = { 0 };
521+
bson_error_t error = { 0 };
515522

516523
php_phongo_zval_to_bson_value(zvalue, PHONGO_BSON_NONE, &value);
517524

518525
opts = phongo_clientencryption_encrypt_opts_from_zval(options);
526+
519527
if (!opts) {
520528
/* Exception already thrown */
521529
goto cleanup;
@@ -535,24 +543,32 @@ static void phongo_clientencryption_encrypt(php_phongo_clientencryption_t* clien
535543
if (opts) {
536544
mongoc_client_encryption_encrypt_opts_destroy(opts);
537545
}
546+
547+
bson_value_destroy(&ciphertext);
548+
bson_value_destroy(&value);
538549
} /* }}} */
539550

540551
static void phongo_clientencryption_decrypt(php_phongo_clientencryption_t* clientencryption, zval* zciphertext, zval* zvalue) /* {{{ */
541552
{
542-
bson_value_t ciphertext, value;
543-
bson_error_t error = { 0 };
553+
bson_value_t ciphertext = { 0 };
554+
bson_value_t value = { 0 };
555+
bson_error_t error = { 0 };
544556

545557
php_phongo_zval_to_bson_value(zciphertext, PHONGO_BSON_NONE, &ciphertext);
546558

547559
if (!mongoc_client_encryption_decrypt(clientencryption->client_encryption, &ciphertext, &value, &error)) {
548560
phongo_throw_exception_from_bson_error_t(&error);
549-
return;
561+
goto cleanup;
550562
}
551563

552564
if (!php_phongo_bson_value_to_zval(&value, zvalue)) {
553565
/* Exception already thrown */
554-
return;
566+
goto cleanup;
555567
}
568+
569+
cleanup:
570+
bson_value_destroy(&ciphertext);
571+
bson_value_destroy(&value);
556572
} /* }}} */
557573
#else /* MONGOC_ENABLE_CLIENT_SIDE_ENCRYPTION */
558574
void phongo_clientencryption_init(php_phongo_clientencryption_t* clientencryption, zval* manager, zval* options) /* {{{ */

0 commit comments

Comments
 (0)