Support trust gvfs idx files for scalar prefetch#766
Closed
tyrielv wants to merge 1 commit intomicrosoft:vfs-2.49.0from
Closed
Support trust gvfs idx files for scalar prefetch#766tyrielv wants to merge 1 commit intomicrosoft:vfs-2.49.0from
tyrielv wants to merge 1 commit intomicrosoft:vfs-2.49.0from
Conversation
c41a01f to
e8b8eaf
Compare
GVFS protocol's prefetch operation (used to fetch pack files for commits and trees) includes idx files as well as pack files. Gvfs.exe (from VFSForGit) trusts the idx files it fetches, but scalar currently does not and always reindexes them locally. This has an observed performance impact where scalar clone takes up to 10x as long as gvfs clone for large repositories. This pull request adds support for trusting idx files to the prefetch operation in scalar, with the following behavior in priority order: 1. If --[no-]trust-idx is specified, use that 2. If global config `gvfs.trustidxfiles` is set, use that 3. If the url to clone/prefetch is Azure DevOps, trust it 4. Otherwise, do not trust it
e8b8eaf to
5cba6be
Compare
derrickstolee
requested changes
Jun 12, 2025
derrickstolee
left a comment
There was a problem hiding this comment.
I'm sorry that you spent time on this, but trusting the .idx files is a serious security issue. If we "trust" the .idx file, then we could have a rogue cache server deliver us a bad .idx file where it says "this Object Id has this content" but that content doesn't actually hash to that object ID.
There are similar checks when asking for a loose object by object ID: we used to trust the cache server for performance reasons, but this security boundary is really really important.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GVFS protocol's prefetch operation (used to fetch pack files for commits and trees) includes idx files as well as pack files. Gvfs.exe (from VFSForGit) trusts the idx files it fetches, but scalar currently does not and always reindexes them locally.
This has an observed performance impact where scalar clone takes up to 10x as long as gvfs clone for large repositories.
This pull request adds support for trusting idx files to the prefetch operation in scalar, with the following behavior in priority order:
gvfs.trustidxfilesis set, use that