mongo-rust-driver icon indicating copy to clipboard operation
mongo-rust-driver copied to clipboard

Memory leak in `command_simple`

Open kamulos opened this issue 4 years ago • 1 comments

This is really strange

Reproduction

use bson::doc;
use mongo_driver::client::{ClientPool, Uri};

fn main() {
    let mongo_uri = Uri::new("mongodb://127.0.0.1:27017").unwrap();
    let pool = ClientPool::new(mongo_uri, None);
    let ping = doc! {"ping": 1};
    pool.pop()
        .get_database("admin")
        .command_simple(ping, None)
        .unwrap();
}

Run it with:

RUSTFLAGS="$RUSTFLAGS -Zsanitizer=address" cargo +nightly run --target=x86_64-unknown-linux-gnu

Possible reason

In database::command_simple(), when the bson_t is created the flags are set to 1, but after the bindings::mongoc_database_command_simple() the flags are set to 2. This means BSON_FLAG_STATIC which leads to skipping the free() in bson_destroy().

Not sure how this works internally, but this is my best guess...

kamulos avatar May 31 '21 18:05 kamulos

I also forwarded this issue to the libmongoc issue tracker: https://jira.mongodb.org/browse/CDRIVER-4039

kamulos avatar Jun 25 '21 15:06 kamulos