Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ManagedGit: Attempted to read past the end of the stream. #817

Closed
marcin-krystianc opened this issue Sep 20, 2022 · 1 comment · Fixed by #818
Closed

ManagedGit: Attempted to read past the end of the stream. #817

marcin-krystianc opened this issue Sep 20, 2022 · 1 comment · Fixed by #818
Milestone

Comments

@marcin-krystianc
Copy link
Contributor

I've encountered an issue with managed git engine, which is related o packed streams but it is different from the #797.

The "Nerdbank.GitVersioning.Tasks.GetBuildVersion" task failed unexpectedly. [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
System.InvalidOperationException: Unable to get version from commit: bfc6aaadccbbdf5facd2a539af89dbc1e9c975f9 [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
 ---> System.IO.EndOfStreamException: Attempted to read past the end of the stream. [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at Nerdbank.GitVersioning.ManagedGit.StreamExtensions.ReadAll(Stream stream, Span`1 buffer) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at Nerdbank.GitVersioning.ManagedGit.GitTreeStreamingReader.FindNode(Stream stream, ReadOnlySpan`1 name) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at Nerdbank.GitVersioning.ManagedGit.GitRepository.GetTreeEntry(GitObjectId treeId, ReadOnlySpan`1 nodeName) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at Nerdbank.GitVersioning.Managed.ManagedVersionFile.GetVersion(GitCommit commit, String repoRelativeProjectDirectory, Dictionary`2 blobVersionCache, String& actualDirectory) [C:\Users\marcink\.nuget\packages\nerd

   at Nerdbank.GitVersioning.Managed.GitExtensions.GitWalkTracker.GetVersion(GitCommit commit) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   --- End of inner exception stack trace --- [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at Nerdbank.GitVersioning.Managed.GitExtensions.GitWalkTracker.GetVersion(GitCommit commit) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at Nerdbank.GitVersioning.Managed.GitExtensions.CommitMatchesVersion(GitCommit commit, SemanticVersion expectedVersion, Position comparisonPrecision, GitWalkTracker tracker) [C:\Users\marcink\.nuget\packages\nerdb

   at Nerdbank.GitVersioning.Managed.GitExtensions.<>c__DisplayClass1_0.<GetVersionHeight>b__0(GitCommit c) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at Nerdbank.GitVersioning.Managed.GitExtensions.<GetCommitHeight>g__TryCalculateHeight|4_0(GitCommit commit, <>c__DisplayClass4_0&) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2P

   at Nerdbank.GitVersioning.Managed.GitExtensions.GetCommitHeight(GitRepository repository, GitCommit startingCommit, GitWalkTracker tracker, Func`2 continueStepping) [C:\Users\marcink\.nuget\packages\nerdbank.gitve

   at Nerdbank.GitVersioning.Managed.GitExtensions.GetHeight(ManagedGitContext context, Func`2 continueStepping) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at Nerdbank.GitVersioning.Managed.GitExtensions.GetVersionHeight(ManagedGitContext context, Version baseVersion) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at Nerdbank.GitVersioning.Managed.ManagedGitContext.CalculateVersionHeight(VersionOptions committedVersion, VersionOptions workingVersion) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\Pri

   at Nerdbank.GitVersioning.VersionOracle..ctor(GitContext context, ICloudBuild cloudBuild, Nullable`1 overrideVersionHeightOffset) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCa

   at Nerdbank.GitVersioning.Tasks.GetBuildVersion.ExecuteInner() [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
   at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr) [C:\Users\marcink\.nuget\packages\nerdbank.gitversioning\3.5.109\build\PrivateP2PCaching.proj]
    0 Warning(s)
    1 Error(s)
  • This issue reproduces using the latest release 3.5.109 and the latest pre-release 3.6.42-alpha-g47b0d281e4

My analysis shows, that the problem is caused by the DeltaStreamReader, sometimes it returns a Copy instruction with length equal to 0. It seems that the implementation of DeltaStreamReader missed one special case that is mentioned in git's documentation:

In its most compact form, this instruction only takes up one byte (0x80) with both offset and size omitted, which will have default values zero. There is another exception: size zero is automatically converted to 0x10000.
@AArnott
Copy link
Collaborator

AArnott commented Sep 20, 2022

The fix for this will be released in 3.5.113, which is coming out imminently.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants