From eb3bfdceb4a88c63d28ad3677397c3ca0e770588 Mon Sep 17 00:00:00 2001 From: Test User Date: Sat, 14 Nov 2020 13:17:13 +1100 Subject: [PATCH 1/2] Test and Fix for https://github.com/libgit2/libgit2sharp/issues/1851 Crash calling Repository.IsValid with corrupt .git/config --- LibGit2Sharp.Tests/RepositoryFixture.cs | 9 +++++++++ LibGit2Sharp/Core/Proxy.cs | 6 +++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/LibGit2Sharp.Tests/RepositoryFixture.cs b/LibGit2Sharp.Tests/RepositoryFixture.cs index 5c551fabd..c69a2f347 100644 --- a/LibGit2Sharp.Tests/RepositoryFixture.cs +++ b/LibGit2Sharp.Tests/RepositoryFixture.cs @@ -78,6 +78,15 @@ public void IsValidWithValidPath() Assert.True(Repository.IsValid(repoPath)); } + [Fact] + public void IsValidWithInvalidGitConfig() + { + string repoPath = InitNewRepository(); + File.AppendAllLines(Path.Combine(repoPath, "config"), new[] { @"[diff ""mytool""] command = C:\path\to\mytool\mytool.exe" }); + var ex = Assert.Throws(() => Repository.IsValid(repoPath)); + Assert.Equal(@"invalid escape at path\to\mytool\mytool.exe", ex.Message); + } + [Fact] public void CanCreateStandardRepo() { diff --git a/LibGit2Sharp/Core/Proxy.cs b/LibGit2Sharp/Core/Proxy.cs index c3a53b95e..75fc4dc80 100644 --- a/LibGit2Sharp/Core/Proxy.cs +++ b/LibGit2Sharp/Core/Proxy.cs @@ -2573,7 +2573,11 @@ public static unsafe void git_repository_open_ext(string path, RepositoryOpenFla git_repository *repo; res = NativeMethods.git_repository_open_ext(out repo, path, flags, ceilingDirs); - NativeMethods.git_repository_free(repo); + + if (res == (int)GitErrorCode.Ok) + { + NativeMethods.git_repository_free(repo); + } if (res == (int)GitErrorCode.NotFound) { From 0769bd1a417c910ddb23642501083c33098a8d74 Mon Sep 17 00:00:00 2001 From: Test User Date: Mon, 16 Nov 2020 09:19:17 +1100 Subject: [PATCH 2/2] Revert changes to test build works --- LibGit2Sharp.Tests/RepositoryFixture.cs | 16 ++++++++-------- LibGit2Sharp/Core/Proxy.cs | 9 +++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/LibGit2Sharp.Tests/RepositoryFixture.cs b/LibGit2Sharp.Tests/RepositoryFixture.cs index c69a2f347..b0b9caa1d 100644 --- a/LibGit2Sharp.Tests/RepositoryFixture.cs +++ b/LibGit2Sharp.Tests/RepositoryFixture.cs @@ -78,14 +78,14 @@ public void IsValidWithValidPath() Assert.True(Repository.IsValid(repoPath)); } - [Fact] - public void IsValidWithInvalidGitConfig() - { - string repoPath = InitNewRepository(); - File.AppendAllLines(Path.Combine(repoPath, "config"), new[] { @"[diff ""mytool""] command = C:\path\to\mytool\mytool.exe" }); - var ex = Assert.Throws(() => Repository.IsValid(repoPath)); - Assert.Equal(@"invalid escape at path\to\mytool\mytool.exe", ex.Message); - } + //[Fact] + //public void IsValidWithInvalidGitConfig() + //{ + // string repoPath = InitNewRepository(); + // File.AppendAllLines(Path.Combine(repoPath, "config"), new[] { @"[diff ""mytool""] command = C:\path\to\mytool\mytool.exe" }); + // var ex = Assert.Throws(() => Repository.IsValid(repoPath)); + // Assert.Equal(@"invalid escape at path\to\mytool\mytool.exe", ex.Message); + //} [Fact] public void CanCreateStandardRepo() diff --git a/LibGit2Sharp/Core/Proxy.cs b/LibGit2Sharp/Core/Proxy.cs index 75fc4dc80..1ec6dbe13 100644 --- a/LibGit2Sharp/Core/Proxy.cs +++ b/LibGit2Sharp/Core/Proxy.cs @@ -2573,11 +2573,12 @@ public static unsafe void git_repository_open_ext(string path, RepositoryOpenFla git_repository *repo; res = NativeMethods.git_repository_open_ext(out repo, path, flags, ceilingDirs); + NativeMethods.git_repository_free(repo); - if (res == (int)GitErrorCode.Ok) - { - NativeMethods.git_repository_free(repo); - } + //if (res == (int)GitErrorCode.Ok) + //{ + // NativeMethods.git_repository_free(repo); + //} if (res == (int)GitErrorCode.NotFound) {