Skip to content

Diff::merge() causes double free #964

Open
@slack-coder

Description

@slack-coder

The library fails with a double free when merging two Diff's built from buffers. Is this intended to be supported?

Cargo.toml

[dependencies.git2]
version = "0.17.2"
default-features = false
features = ["vendored-libgit2"]
        use git2;

        let diff_a: &str = r#"
diff --git a/README.md b/README.md
index 18fb8328..ce60f40c 100644
--- a/README.md
+++ b/README.md
@@ -4,1 +4,2 @@ componentwise
 reusing
+proverb
"#
        .trim_start();
        let mut diff_a = git2::Diff::from_buffer(diff_a.as_bytes()).unwrap();

        let diff_b: &str = r#"
diff --git a/README.md b/README.md
index 18fb8328..ce60f40c 100644
--- a/README.md
+++ b/README.md
@@ -4,2 +4,3 @@ componentwise
 reusing
 proverb
+offended
"#
        .trim_start();
        let diff_b = git2::Diff::from_buffer(diff_b.as_bytes()).unwrap();

        diff_a.merge(&diff_b).expect("merge diff from buffers");

Results in:

free(): double free detected in tcache 2
error: test failed, to rerun pass `-p radicle-cli --lib`

Edit: simplified example and added Cargo information

Metadata

Metadata

Assignees

No one assigned

    Labels

    upstreamAn upstream issue with libgit2

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions