From 2d72e269ba2e9bc60e1f4cb617fea2d248e907ca Mon Sep 17 00:00:00 2001 From: Kevin Albertson Date: Fri, 21 Nov 2025 14:49:39 -0500 Subject: [PATCH 1/2] CDRIVER-6157 add missing `_mongoc_gridfs_bucket_opts_cleanup` And add a regression test for coverage. Addresses Coverity issues 162151 and 162146 --- .../src/mongoc/mongoc-gridfs-bucket.c | 1 + .../tests/test-mongoc-gridfs-bucket.c | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/libmongoc/src/mongoc/mongoc-gridfs-bucket.c b/src/libmongoc/src/mongoc/mongoc-gridfs-bucket.c index 1f8f95cfe05..d18ebd4b807 100644 --- a/src/libmongoc/src/mongoc/mongoc-gridfs-bucket.c +++ b/src/libmongoc/src/mongoc/mongoc-gridfs-bucket.c @@ -105,6 +105,7 @@ mongoc_gridfs_bucket_new(mongoc_database_t *db, "bucketName \"%s\" must have fewer than %d characters", gridfs_opts.bucketName, (int)(sizeof(buf) - (strlen(".chunks") + 1))); + _mongoc_gridfs_bucket_opts_cleanup(&gridfs_opts); return NULL; } diff --git a/src/libmongoc/tests/test-mongoc-gridfs-bucket.c b/src/libmongoc/tests/test-mongoc-gridfs-bucket.c index 07116c4a7f1..a2ddf35a9ca 100644 --- a/src/libmongoc/tests/test-mongoc-gridfs-bucket.c +++ b/src/libmongoc/tests/test-mongoc-gridfs-bucket.c @@ -1222,6 +1222,44 @@ test_bad_sizes(void) mongoc_client_destroy(client); } +// test_big_bucket_name is a regression test for CDRIVER-6157. +static void +test_big_bucket_name(void) +{ + mongoc_client_t *client = test_framework_new_default_client(); + mongoc_database_t *db = mongoc_client_get_database(client, "db"); + + // Create options: + bson_t opts = BSON_INITIALIZER; + { + // Use too-big bucket name to trigger error: + char *big_name = bson_malloc(256); + memset(big_name, 'a', 255); + big_name[255] = '\0'; + BSON_APPEND_UTF8(&opts, "bucketName", big_name); + bson_free(big_name); + + // Add a write concern to reproduce memory leak: + mongoc_write_concern_t *wc = mongoc_write_concern_new(); + mongoc_write_concern_set_w(wc, MONGOC_WRITE_CONCERN_W_MAJORITY); + ASSERT(mongoc_write_concern_append(wc, &opts)); + mongoc_write_concern_destroy(wc); + } + + // Expect error creating bucket, but not a leak: + { + bson_error_t error; + mongoc_gridfs_bucket_t *bucket = mongoc_gridfs_bucket_new(db, &opts, NULL, &error); + ASSERT(!bucket); + ASSERT_ERROR_CONTAINS(error, MONGOC_ERROR_COMMAND, MONGOC_ERROR_COMMAND_INVALID_ARG, "must have fewer"); + mongoc_gridfs_bucket_destroy(bucket); + } + + bson_destroy(&opts); + mongoc_database_destroy(db); + mongoc_client_destroy(client); +} + void test_gridfs_bucket_install(TestSuite *suite) { @@ -1246,4 +1284,5 @@ test_gridfs_bucket_install(TestSuite *suite) test_framework_skip_if_no_crypto); TestSuite_AddLive(suite, "/gridfs/options", test_gridfs_bucket_opts); TestSuite_AddLive(suite, "/gridfs/bad_sizes", test_bad_sizes); + TestSuite_Add(suite, "/gridfs/big_bucket_name", test_big_bucket_name); } From 55d7f8f1fb393c9923965e3ac9afa0a41f941e18 Mon Sep 17 00:00:00 2001 From: Kevin Albertson Date: Fri, 21 Nov 2025 15:18:51 -0500 Subject: [PATCH 2/2] require live server To avoid failure in mock server test task --- src/libmongoc/tests/test-mongoc-gridfs-bucket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libmongoc/tests/test-mongoc-gridfs-bucket.c b/src/libmongoc/tests/test-mongoc-gridfs-bucket.c index a2ddf35a9ca..46bda121eef 100644 --- a/src/libmongoc/tests/test-mongoc-gridfs-bucket.c +++ b/src/libmongoc/tests/test-mongoc-gridfs-bucket.c @@ -1284,5 +1284,5 @@ test_gridfs_bucket_install(TestSuite *suite) test_framework_skip_if_no_crypto); TestSuite_AddLive(suite, "/gridfs/options", test_gridfs_bucket_opts); TestSuite_AddLive(suite, "/gridfs/bad_sizes", test_bad_sizes); - TestSuite_Add(suite, "/gridfs/big_bucket_name", test_big_bucket_name); + TestSuite_AddLive(suite, "/gridfs/big_bucket_name", test_big_bucket_name); }