From 83546707085af9b59bdefdfbb2dc5511dadb57d7 Mon Sep 17 00:00:00 2001 From: zeripath Date: Thu, 16 Dec 2021 19:01:14 +0000 Subject: Prevent hang in git cat-file if repository is not a valid repository and other fixes (#17991) This PR contains multiple fixes. The most important of which is: * Prevent hang in git cat-file if the repository is not a valid repository Unfortunately it appears that if git cat-file is run in an invalid repository it will hang until stdin is closed. This will result in deadlocked /pulls pages and dangling git cat-file calls if a broken repository is tried to be reviewed or pulls exists for a broken repository. Fix #14734 Fix #9271 Fix #16113 Otherwise there are a few small other fixes included which this PR was initially intending to fix: * Fix panic on partial compares due to missing PullRequestWorkInProgressPrefixes * Fix links on pulls pages due to regression from #17551 - by making most /issues routes match /pulls too - Fix #17983 * Fix links on feeds pages due to another regression from #17551 but also fix issue with syncing tags - Fix #17943 * Add missing locale entries for oauth group claims * Prevent NPEs if ColorFormat is called on nil users, repos or teams. --- modules/indexer/code/bleve.go | 6 ++++++ modules/indexer/code/elastic_search.go | 5 +++++ 2 files changed, 11 insertions(+) (limited to 'modules/indexer') diff --git a/modules/indexer/code/bleve.go b/modules/indexer/code/bleve.go index 1affdf73b0..25cb8bf5c9 100644 --- a/modules/indexer/code/bleve.go +++ b/modules/indexer/code/bleve.go @@ -275,6 +275,12 @@ func (b *BleveIndexer) Index(repo *repo_model.Repository, sha string, changes *r batch := gitea_bleve.NewFlushingBatch(b.indexer, maxBatchSize) if len(changes.Updates) > 0 { + // Now because of some insanity with git cat-file not immediately failing if not run in a valid git directory we need to run git rev-parse first! + if err := git.EnsureValidGitRepository(git.DefaultContext, repo.RepoPath()); err != nil { + log.Error("Unable to open git repo: %s for %-v: %v", repo.RepoPath(), repo, err) + return err + } + batchWriter, batchReader, cancel := git.CatFileBatch(git.DefaultContext, repo.RepoPath()) defer cancel() diff --git a/modules/indexer/code/elastic_search.go b/modules/indexer/code/elastic_search.go index bd5faf3b04..169dffd78b 100644 --- a/modules/indexer/code/elastic_search.go +++ b/modules/indexer/code/elastic_search.go @@ -247,6 +247,11 @@ func (b *ElasticSearchIndexer) addDelete(filename string, repo *repo_model.Repos func (b *ElasticSearchIndexer) Index(repo *repo_model.Repository, sha string, changes *repoChanges) error { reqs := make([]elastic.BulkableRequest, 0) if len(changes.Updates) > 0 { + // Now because of some insanity with git cat-file not immediately failing if not run in a valid git directory we need to run git rev-parse first! + if err := git.EnsureValidGitRepository(git.DefaultContext, repo.RepoPath()); err != nil { + log.Error("Unable to open git repo: %s for %-v: %v", repo.RepoPath(), repo, err) + return err + } batchWriter, batchReader, cancel := git.CatFileBatch(git.DefaultContext, repo.RepoPath()) defer cancel() -- cgit v1.2.3