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

PR Error 500 on CreateCsvDiff when trying to merge some branches: invalid memory address #19530

Closed
99rgosse opened this issue Apr 27, 2022 · 7 comments
Labels

Comments

@99rgosse
Copy link
Contributor

99rgosse commented Apr 27, 2022

Description

Hello
We have a huge repo (800 branches, 6Gb lfs files, 12k commits, with branch protection) that we have migrated from Gitlab 2 weeks ago, on a Self hosted Gitea 1.16.5 with Pgsql

Since 2 days, some users encounters a 500 error when trying to create a pull request, there are some branches that generates this error
I tested this on the 1.16.5 & 1.16.6 instances I have. We have not many other repo to test otherwise

If we recreate the same branch with another name, the PR works as intended.

short version log :

2022/04/27 14:44:11 ...rs/web/repo/issue.go:751:setTemplateIfExists() [D] could not extract metadata fdev .gitea/pull_request_template.md [mainrepo/dev]: frontmatter must start with a separator line

2022/04/27 14:44:11 ...s/context/context.go:204:HTML() [D] Template: repo/diff/compare

2022/04/27 14:44:12 ...s/context/context.go:214:HTML() [E] Render failed: template: repo/diff/csv_diff:3:15: executing "repo/diff/csv_diff" at <call .root.CreateCsvDiff .file .root.BaseCommit .root.HeadCommit>: error calling call: runtime error: invalid memory address or nil pointer dereference

2022/04/27 14:44:12 ...s/context/context.go:204:HTML() [D] Template: status/500

2022/04/27 14:44:12 Completed GET /mainrepo/dev/compare/release/master...release/calibration 500 Internal Server Error in 1.331171119s

Gitea Version

1.16.5 / 1.16.6 / latest dev on master

Can you reproduce the bug on the Gitea demo site?

No

Log Gist

https://try.gitea.io/99rgosse/issues/issues/1

Screenshots

image

Git Version

2.30.3

Operating System

Docker Gitea with Ubuntu

How are you running Gitea?

Docker official Gitea v.16.6
Caching enabled :

[cache]
  | ENABLED  = true
  | ADAPTER  = memory
  | INTERVAL = 120
  | ITEM_TTL = 24h
  |  
  | [cache.last_commit]
  | ENABLED       = true
  | ITEM_TTL      = 8760h
  | COMMITS_COUNT = 7000

I tried :

  • Removing the caching
  • Removing the template generating errors

Database

PostgreSQL

@wxiaoguang
Copy link
Contributor

wxiaoguang commented Apr 27, 2022

It's likely caused by a bug in CreateCsvDiff, do you have some CSV files to reproduce the bug?


If we recreate the same branch with another name, the PR works as intended., that's also weird ....

@wxiaoguang
Copy link
Contributor

Is it possible that you could add a recover at the beginning of CreateCsvDiff to see the panic stack?

@99rgosse
Copy link
Contributor Author

Yes, I will build from source and try this, and try to have more debug

@lunny
Copy link
Member

lunny commented Apr 27, 2022

I have tested a small csv in the pull request and it works. Maybe the csv file has a special format.

@99rgosse
Copy link
Contributor Author

99rgosse commented Apr 28, 2022

The CSV File format is not in cause

Okay, so here is the full history:
Consider branch Official and branches Secondary seemingly being two different products merged from time to time.

  • New branches made from Official are working for a PR with Official - no problem
  • New Branches made from Secondary will be failing to make a PR, trying to CSVDiff the deleted file
    But the file is deleted since the migration day. Precisely this is the latest commit made before I migrated

So the Error comes up as it cannot make a diff on files not existing anymore...

EDIT : adding back the file in a new commit avoid the Error 500

@99rgosse
Copy link
Contributor Author

99rgosse commented Apr 28, 2022

Quick and dirty fix here

if diffFile == nil || baseCommit == nil || headCommit == nil {

if diffFile == nil || baseCommit == nil || headCommit == nil || diffFile.IsDeleted == true {

I will do some tests, because it may fail if we try to compare a CSV then deleted...
It fails indeed...

The full error is "object does not exist" but somehow it is not displayed =>

return nil, nil, err

@wxiaoguang
Copy link
Contributor

wxiaoguang commented Apr 29, 2022

Yep, the logic is incomplete.

It doesn't check the err returned by csvReaderFromCommit correctly, then the nil readers are used below.

https://github.com/go-gitea/gitea/blob/8eb1cd9264af9493e0f57a4a4c0a1f764f7cefcf/routers/web/repo/compare.go#L139-L154


Update (2022-09-16): the comment above seems incorrect, as discussed in #21184, the CreateCsvDiff is intended to handle nil head or base commit. So, the 500 error is likely to be caused by other reasons.


Update (2023-02-17): according to #22946, the first guess seems reasonable, the CreateCsvDiff logic was incomplete, it should be able to process the situation when base and head are both nil.

@6543 6543 closed this as completed in 438646e May 2, 2022
zjjhot added a commit to zjjhot/gitea that referenced this issue May 3, 2022
* giteaofficial/main:
  Fix some slice problems (incorrect slice length) (go-gitea#19592)
  Fix sending empty notifications (go-gitea#19589)
  Handle the error of a missing blob object fix go-gitea#19530 (go-gitea#19552)
  Remove legacy `+build:` constraint (go-gitea#19582)
  Federation: return useful statistic information for nodeinfo (go-gitea#19561)
  Upgrade required git version to 2.0 (go-gitea#19577)
  add smtp password to install page (go-gitea#17564)
  ignore DNS error when doing migration allow/block check (go-gitea#19566)
  [skip ci] Updated translations via Crowdin
  Dont overwrite err with nil & rename PullCheckingFuncs to reflect there usage (go-gitea#19572)
  Improve UI on mobile (go-gitea#19546)
  Add API to check if team has repo access (go-gitea#19540)
AbdulrhmnGhanem pushed a commit to kitspace/gitea that referenced this issue Aug 24, 2022
…a#19552)

* Handle the error of a missing blob object

* Show error in logs

* as per @zeripath

* Add missing error check

* Add missing error check

* Update compare.go

* Use formal code

* Update compare.go

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: 6543 <6543@obermui.de>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
lunny pushed a commit that referenced this issue Sep 17, 2022
Fixes #21184
Regression of #19552

Instead of using `GetBlobByPath` I use the already existing instances.

We need more information from #19530 if that error is still present.
wxiaoguang pushed a commit to wxiaoguang/gitea that referenced this issue Sep 17, 2022
Fixes go-gitea#21184
Regression of go-gitea#19552

Instead of using `GetBlobByPath` I use the already existing instances.

We need more information from go-gitea#19530 if that error is still present.
lunny pushed a commit that referenced this issue Feb 20, 2023
Replaces: #22947
Fixes #22946
Probably related to #19530

Basically, many of the diffs were broken because they were comparing to
the base commit, where a 3-dot diff should be comparing to the [last
common
ancestor](https://matthew-brett.github.io/pydagogue/git_diff_dots.html).

This should have an integration test so that we don’t run into this
issue again.

---------

Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
techknowlogick pushed a commit that referenced this issue Feb 21, 2023
Backport #22949
Fixes #22946
Probably related to #19530

Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
Codeberg-org pushed a commit to Codeberg-org/gitea that referenced this issue Feb 23, 2023
Backport go-gitea#22949
Fixes go-gitea#22946
Probably related to go-gitea#19530

Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
(cherry picked from commit 760cf41)
@go-gitea go-gitea locked and limited conversation to collaborators May 3, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

3 participants