libgit2 / libgit2sharp

Git + .NET = ❤
http://libgit2.github.com
MIT License
3.17k stars 886 forks source link

Access Violation on pushing to a new remote #1981

Open wilkovanderveen opened 2 years ago

wilkovanderveen commented 2 years ago

Reproduction steps

  using var repository = new Repository(_options.LocalRepositoryPath);
            const string message = "message";
            var commitOptions = new CommitOptions()
            {
                AllowEmptyCommit = false,
                PrettifyMessage = true,
            };
            var authorSignature = new Signature(_options.Username, _options.Email, DateTimeOffset.UtcNow);

            await UpdateReadmeFile();

            repository.Index.Add("readme.md");
            repository.Index.Write();

            Commands.Stage(repository, "*");

            repository.Commit(message, authorSignature, authorSignature, commitOptions);

            PushOptions pushOptions = new PushOptions()
            {
                CredentialsProvider = (_, __, ___) => new DefaultCredentials(),               
            };

            _logger.LogInformation("Pushing changes to remote");
            _logger.LogDebug($"Branch has been tracked: {branch.IsTracking}");        

            repository.Network.Push(branch, pushOptions);

Expected behavior

Another error should occur when the local branch is not being tracked. But not an access violation exception.

Actual behavior

This craches with:

Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Repeat 2 times:
--------------------------------
   at LibGit2Sharp.Core.NativeMethods.git_branch_upstream_name(LibGit2Sharp.Core.Handles.GitBuf, LibGit2Sharp.Core.git_repository*, System.String)
--------------------------------
   at LibGit2Sharp.Core.Proxy.git_branch_upstream_name(LibGit2Sharp.Core.Handles.RepositoryHandle, System.String)
   at LibGit2Sharp.Branch.ResolveTrackedBranch()
   at System.Lazy`1[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].ViaFactory(System.Threading.LazyThreadSafetyMode)
   at System.Lazy`1[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].ExecutionAndPublication(System.LazyHelper, Boolean)
   at System.Lazy`1[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].CreateValue()
   at LibGit2Sharp.Branch.get_IsTracking()

Version of LibGit2Sharp (release number or SHA1)

Operating system(s) tested; .NET runtime tested

OS: Windows 10 Professional .NET runtime: NET 6.0

wilkovanderveen commented 2 years ago

The issue occured because of not doing all the work inside a single using (for the repository), therefore the branch was out of context and this error occured. Still I think this should not happen