diff --git a/modules/setting/git.go b/modules/setting/git.go index 3dfec787bf..123ba515a7 100644 --- a/modules/setting/git.go +++ b/modules/setting/git.go @@ -95,6 +95,17 @@ func loadGitFrom(rootCfg ConfigProvider) { GitConfig.SetOption("core.logAllRefUpdates", "true") GitConfig.SetOption("gc.reflogExpire", "90") + GitConfig.SetOption("transfer.fsckObjects", "true") + // To ignore specific warnings they have to be set for all of the three + // scenarios. Per git-config(1): "To uniformly configure the same fsck + // settings in different circumstances, all three of them must be set to the + // same values." + for _, prefix := range []string{"fsck.", "fetch.fsck.", "receive.fsck."} { + GitConfig.SetOption(prefix+"badTimezone", "ignore") + GitConfig.SetOption(prefix+"missingSpaceBeforeDate", "ignore") + GitConfig.SetOption(prefix+"zeroPaddedFilemode", "ignore") + } + for _, key := range secGitConfig.Keys() { GitConfig.SetOption(key.Name(), key.String()) } diff --git a/modules/setting/git_test.go b/modules/setting/git_test.go index 7cbf1d70a3..e1cac8ff19 100644 --- a/modules/setting/git_test.go +++ b/modules/setting/git_test.go @@ -32,6 +32,32 @@ diff.algorithm = other require.NoError(t, err) loadGitFrom(cfg) assert.Equal(t, "other", GitConfig.Options["diff.algorithm"]) + + t.Run("Fsck options", func(t *testing.T) { + cfg, err := NewConfigProviderFromData(` +[git.config] +receive.fsckObjects = false +fetch.fsck.zeroPaddedFilemode = warn +fsck.missingSpaceBeforeDate = error +`) + require.NoError(t, err) + loadGitFrom(cfg) + assert.Equal(t, "false", GitConfig.Options["receive.fsckobjects"]) + assert.Equal(t, "true", GitConfig.Options["transfer.fsckobjects"]) + assert.NotContains(t, GitConfig.Options, "fetch.fsckobjects") + + assert.Equal(t, "ignore", GitConfig.Options["fsck.badtimezone"]) + assert.Equal(t, "error", GitConfig.Options["fsck.missingspacebeforedate"]) + assert.Equal(t, "ignore", GitConfig.Options["fsck.zeropaddedfilemode"]) + + assert.Equal(t, "ignore", GitConfig.Options["receive.fsck.badtimezone"]) + assert.Equal(t, "ignore", GitConfig.Options["receive.fsck.missingspacebeforedate"]) + assert.Equal(t, "ignore", GitConfig.Options["receive.fsck.zeropaddedfilemode"]) + + assert.Equal(t, "ignore", GitConfig.Options["fetch.fsck.badtimezone"]) + assert.Equal(t, "ignore", GitConfig.Options["fetch.fsck.missingspacebeforedate"]) + assert.Equal(t, "warn", GitConfig.Options["fetch.fsck.zeropaddedfilemode"]) + }) } func TestGitReflog(t *testing.T) { diff --git a/routers/web/repo/wiki_test.go b/routers/web/repo/wiki_test.go index 5709b32257..4a8195e04e 100644 --- a/routers/web/repo/wiki_test.go +++ b/routers/web/repo/wiki_test.go @@ -86,7 +86,7 @@ func TestWiki(t *testing.T) { Wiki(ctx) assert.Equal(t, http.StatusOK, ctx.Resp.Status()) assert.EqualValues(t, "Home", ctx.Data["Title"]) - assertPagesMetas(t, []string{"Home", "Long Page", "Page With Image", "Page With Spaced Name", "Unescaped File", "XSS"}, ctx.Data["Pages"]) + assertPagesMetas(t, []string{"Home", "Long Page", "Page With Image", "Page With Spaced Name", "Unescaped File"}, ctx.Data["Pages"]) } func TestWikiPages(t *testing.T) { @@ -96,7 +96,7 @@ func TestWikiPages(t *testing.T) { contexttest.LoadRepo(t, ctx, 1) WikiPages(ctx) assert.Equal(t, http.StatusOK, ctx.Resp.Status()) - assertPagesMetas(t, []string{"Home", "Long Page", "Page With Image", "Page With Spaced Name", "Unescaped File", "XSS"}, ctx.Data["Pages"]) + assertPagesMetas(t, []string{"Home", "Long Page", "Page With Image", "Page With Spaced Name", "Unescaped File"}, ctx.Data["Pages"]) } func TestNewWiki(t *testing.T) { diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/description b/tests/gitea-repositories-meta/user2/repo1.wiki.git/description deleted file mode 100644 index 498b267a8c..0000000000 --- a/tests/gitea-repositories-meta/user2/repo1.wiki.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/info/refs b/tests/gitea-repositories-meta/user2/repo1.wiki.git/info/refs new file mode 100644 index 0000000000..a06031a5e0 --- /dev/null +++ b/tests/gitea-repositories-meta/user2/repo1.wiki.git/info/refs @@ -0,0 +1 @@ +d49ac742d44063dcf69d4e0afe725813b777dd89 refs/heads/master diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 deleted file mode 100644 index c0314c5584..0000000000 --- a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 +++ /dev/null @@ -1,2 +0,0 @@ -xm DMY(J`5ɜ-K*Ki,Hi!?K_sq/]09MHpѤk_d-%풇۞ v_]^/I[t \ No newline at end of file diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/0d/ca5bd9b5d7ef937710e056f575e86c0184ba85 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/0d/ca5bd9b5d7ef937710e056f575e86c0184ba85 deleted file mode 100644 index a46c1925ec..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/0d/ca5bd9b5d7ef937710e056f575e86c0184ba85 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/2c/54faec6c45d31c1abfaecdab471eac6633738a b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/2c/54faec6c45d31c1abfaecdab471eac6633738a deleted file mode 100644 index 4cf6cdaa6f..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/2c/54faec6c45d31c1abfaecdab471eac6633738a and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 deleted file mode 100644 index d52aa8e1ff..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 deleted file mode 100644 index bf4ae859f6..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/53/0ab3e043bf2295fd1cec3129bf203a4349597a b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/53/0ab3e043bf2295fd1cec3129bf203a4349597a deleted file mode 100644 index eeae5d2b64..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/53/0ab3e043bf2295fd1cec3129bf203a4349597a and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc deleted file mode 100644 index 84ade81980..0000000000 --- a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc +++ /dev/null @@ -1 +0,0 @@ -xM@ Mr›6&&&9Leśwt<#͡mv-0wbjy̖ڗ~݋[=H ."ǁ= \ No newline at end of file diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 deleted file mode 100644 index 052fdf35a5..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e deleted file mode 100644 index bcb0e0075c..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 deleted file mode 100644 index 9c26495605..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/89/43a1d5f93c00439d5ffc0f8e36f5d60abae46c b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/89/43a1d5f93c00439d5ffc0f8e36f5d60abae46c deleted file mode 100644 index 062641bee7..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/89/43a1d5f93c00439d5ffc0f8e36f5d60abae46c and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/a6/dc41d9e96df65286a79f5625ec51635e47f752 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/a6/dc41d9e96df65286a79f5625ec51635e47f752 deleted file mode 100644 index 1aecac1f1b..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/a6/dc41d9e96df65286a79f5625ec51635e47f752 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/bf/29486462016efad8872371078932d8c2cb5253 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/bf/29486462016efad8872371078932d8c2cb5253 deleted file mode 100644 index ab5b5954cb..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/bf/29486462016efad8872371078932d8c2cb5253 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c0/b5b381e2df9f66d11e8c95fe7467b8fb7f3e4e b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c0/b5b381e2df9f66d11e8c95fe7467b8fb7f3e4e deleted file mode 100644 index 0474927fd2..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c0/b5b381e2df9f66d11e8c95fe7467b8fb7f3e4e and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 deleted file mode 100644 index 8a6345dfa5..0000000000 --- a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 +++ /dev/null @@ -1,2 +0,0 @@ -xm0)nt2S`ņe,VY/H#[)E@Nq툎r2)D0jCLaC&4Bv]$EIӑePrIsez˳~_ -[yvWV=헛˘H vZ~s@݉%?TZH \ No newline at end of file diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 deleted file mode 100644 index 6dcfc96676..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/d4/9ac742d44063dcf69d4e0afe725813b777dd89 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/d4/9ac742d44063dcf69d4e0afe725813b777dd89 deleted file mode 100644 index 9dc276f37d..0000000000 --- a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/d4/9ac742d44063dcf69d4e0afe725813b777dd89 +++ /dev/null @@ -1 +0,0 @@ -xn@*GjmJC1~R0ӧi}*U*gw>H˺56}3)Sh0 9Tƨ;2i2-^jL4wS۪pmSTȭ\9V1Sp"|Ǔ.Z>법usuG63)"9G޶..O #XJ$ ?o<1_)n/~6cSl KOv"DJsE؜z[_s!2ϡv%eo( \ No newline at end of file diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/df/6b6d9a97608bc8b56d4f30cde5af00f0681ccf b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/df/6b6d9a97608bc8b56d4f30cde5af00f0681ccf deleted file mode 100644 index 3927778ddf..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/df/6b6d9a97608bc8b56d4f30cde5af00f0681ccf and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/e5/3d079e581fbfdea1075a54d5b621eab0090e52 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/e5/3d079e581fbfdea1075a54d5b621eab0090e52 deleted file mode 100644 index ecdea7f694..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/e5/3d079e581fbfdea1075a54d5b621eab0090e52 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/ea/82fc8777a24b07c26b3a4bf4e2742c03733eab b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/ea/82fc8777a24b07c26b3a4bf4e2742c03733eab deleted file mode 100644 index 42a8258dbd..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/ea/82fc8777a24b07c26b3a4bf4e2742c03733eab and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 deleted file mode 100644 index eaeadaeaee..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/4f5a6b7c4f83b606600e43186165854f189530 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/4f5a6b7c4f83b606600e43186165854f189530 deleted file mode 100644 index a69fc57996..0000000000 Binary files a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/4f5a6b7c4f83b606600e43186165854f189530 and /dev/null differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/info/packs b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/info/packs new file mode 100644 index 0000000000..e8c040e505 --- /dev/null +++ b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/info/packs @@ -0,0 +1,2 @@ +P pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.pack + diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.bitmap b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.bitmap new file mode 100644 index 0000000000..0aad4bc145 Binary files /dev/null and b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.bitmap differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.idx b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.idx new file mode 100644 index 0000000000..ab6497cfe8 Binary files /dev/null and b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.idx differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.pack b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.pack new file mode 100644 index 0000000000..ab624246bf Binary files /dev/null and b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.pack differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.rev b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.rev new file mode 100644 index 0000000000..14fa6a1e0b Binary files /dev/null and b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/pack/pack-dcd8abdfa327da7644d88ee8f092b02a7bb210d4.rev differ diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/packed-refs b/tests/gitea-repositories-meta/user2/repo1.wiki.git/packed-refs new file mode 100644 index 0000000000..f781b81732 --- /dev/null +++ b/tests/gitea-repositories-meta/user2/repo1.wiki.git/packed-refs @@ -0,0 +1,2 @@ +# pack-refs with: peeled fully-peeled sorted +d49ac742d44063dcf69d4e0afe725813b777dd89 refs/heads/master diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/.gitkeep b/tests/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master b/tests/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master deleted file mode 100644 index bd0c0d7efe..0000000000 --- a/tests/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master +++ /dev/null @@ -1 +0,0 @@ -f54f5a6b7c4f83b606600e43186165854f189530 diff --git a/tests/integration/api_wiki_test.go b/tests/integration/api_wiki_test.go index 9639621591..b682523371 100644 --- a/tests/integration/api_wiki_test.go +++ b/tests/integration/api_wiki_test.go @@ -223,29 +223,6 @@ func TestAPIListWikiPages(t *testing.T) { Message: "add unescaped file\n", }, }, - { - Title: "XSS", - HTMLURL: meta[5].HTMLURL, - SubURL: "XSS", - LastCommit: &api.WikiCommit{ - ID: "f54f5a6b7c4f83b606600e43186165854f189530", - Author: &api.CommitUser{ - Identity: api.Identity{ - Name: "Gusted", - Email: "valid@example.org", - }, - Date: "2024-01-31T00:00:00Z", - }, - Committer: &api.CommitUser{ - Identity: api.Identity{ - Name: "Gusted", - Email: "valid@example.org", - }, - Date: "2024-01-31T00:00:00Z", - }, - Message: "Yay XSS", - }, - }, } assert.Equal(t, dummymeta, meta) diff --git a/tests/integration/git_test.go b/tests/integration/git_test.go index 83853883c1..40ca4d7539 100644 --- a/tests/integration/git_test.go +++ b/tests/integration/git_test.go @@ -121,6 +121,7 @@ func testGit(t *testing.T, u *url.URL) { t.Run("PushForkRemoteMessages", doTestForkPushMessages(httpContext, dstPath)) t.Run("CreateAgitFlowPull", doCreateAgitFlowPull(dstPath, &httpContext, "test/head")) t.Run("InternalReferences", doInternalReferences(&httpContext, dstPath)) + t.Run("FsckConsistencyChecks", doFsckConsistencyChecks(dstPath)) t.Run("BranchProtect", doBranchProtect(&httpContext, dstPath)) t.Run("AutoMerge", doAutoPRMerge(&httpContext, dstPath)) t.Run("CreatePRAndSetManuallyMerged", doCreatePRAndSetManuallyMerged(httpContext, httpContext, dstPath, "master", "test-manually-merge")) @@ -170,6 +171,7 @@ func testGit(t *testing.T, u *url.URL) { t.Run("PushForkRemoteMessages", doTestForkPushMessages(sshContext, dstPath)) t.Run("CreateAgitFlowPull", doCreateAgitFlowPull(dstPath, &sshContext, "test/head2")) t.Run("InternalReferences", doInternalReferences(&sshContext, dstPath)) + t.Run("FsckConsistencyChecks", doFsckConsistencyChecks(dstPath)) t.Run("BranchProtect", doBranchProtect(&sshContext, dstPath)) t.Run("MergeFork", func(t *testing.T) { defer tests.PrintCurrentTest(t)() @@ -1337,3 +1339,78 @@ func TestCloneAccessTokenResources(t *testing.T) { }) }) } + +func doFsckConsistencyChecks(dstPath string) func(t *testing.T) { + return func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + + tree, _, err := git.NewCommand(git.DefaultContext, "rev-parse", "HEAD^{tree}").RunStdString(&git.RunOpts{Dir: dstPath}) + require.NoError(t, err) + head, _, err := git.NewCommand(git.DefaultContext, "rev-parse", "HEAD^{commit}").RunStdString(&git.RunOpts{Dir: dstPath}) + require.NoError(t, err) + + // Is checked for and should error. + t.Run("badName", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + + var buf bytes.Buffer + buf.WriteString("tree ") + buf.WriteString(tree) + buf.WriteString("parent ") + buf.WriteString(head) + buf.WriteString("author @>\n") + buf.WriteString("committer @>\n") + buf.WriteString("\n") + + commitID, _, err := git.NewCommand(git.DefaultContext, "hash-object", "-t", "commit", "--literally", "--stdin", "-w").RunStdString(&git.RunOpts{Dir: dstPath, Stdin: &buf}) + require.NoError(t, err) + commitID = strings.TrimSpace(commitID) + + _, stdErr, gitErr := git.NewCommand(git.DefaultContext, "push", "origin").AddDynamicArguments(commitID + ":refs/heads/consistency-check").RunStdString(&git.RunOpts{Dir: dstPath}) + require.Error(t, gitErr) + assert.Contains(t, stdErr, "badName: invalid author/committer line - bad name") + }) + + t.Run("missingSpaceBeforeEmail", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + + var buf bytes.Buffer + buf.WriteString("tree ") + buf.WriteString(tree) + buf.WriteString("parent ") + buf.WriteString(head) + buf.WriteString(`author Gusted 1706659200 +0000`) + buf.WriteRune('\n') + buf.WriteString(`committer Gusted 1706659200 +0000`) + buf.WriteString("\n\n") + + commitID, _, err := git.NewCommand(git.DefaultContext, "hash-object", "-t", "commit", "--literally", "--stdin", "-w").RunStdString(&git.RunOpts{Dir: dstPath, Stdin: &buf}) + require.NoError(t, err) + commitID = strings.TrimSpace(commitID) + + _, stdErr, gitErr := git.NewCommand(git.DefaultContext, "push", "origin").AddDynamicArguments(commitID + ":refs/heads/consistency-check").RunStdString(&git.RunOpts{Dir: dstPath}) + require.Error(t, gitErr) + assert.Contains(t, stdErr, "missingSpaceBeforeEmail: invalid author/committer line - missing space before email") + }) + + // Is set to be ignored. + t.Run("badTimezone", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + + var buf bytes.Buffer + buf.WriteString("tree ") + buf.WriteString(tree) + buf.WriteString("parent ") + buf.WriteString(head) + buf.WriteString("author name 1234 +\n") + buf.WriteString("committer name 1234 +\n") + buf.WriteString("\n") + + commitID, _, err := git.NewCommand(git.DefaultContext, "hash-object", "-t", "commit", "--literally", "--stdin", "-w").RunStdString(&git.RunOpts{Dir: dstPath, Stdin: &buf}) + require.NoError(t, err) + commitID = strings.TrimSpace(commitID) + + require.NoError(t, git.NewCommand(git.DefaultContext, "push", "origin").AddDynamicArguments(commitID+":refs/heads/consistency-check").Run(&git.RunOpts{Dir: dstPath})) + }) + } +} diff --git a/tests/integration/xss_test.go b/tests/integration/xss_test.go index 4eb7bc65b1..0b1ba43e02 100644 --- a/tests/integration/xss_test.go +++ b/tests/integration/xss_test.go @@ -39,33 +39,6 @@ func TestXSSUserFullName(t *testing.T) { ) } -func TestXSSWikiLastCommitInfo(t *testing.T) { - defer tests.PrepareTestEnv(t)() - // Check on page view. - t.Run("Page view", func(t *testing.T) { - defer tests.PrintCurrentTest(t)() - - req := NewRequest(t, http.MethodGet, "/user2/repo1/wiki/XSS") - resp := MakeRequest(t, req, http.StatusOK) - htmlDoc := NewHTMLParser(t, resp.Body) - - htmlDoc.AssertElement(t, "script.evil", false) - assert.Contains(t, htmlDoc.Find(".ui.sub.header").Text(), `Gusted edited this page 2024-01-31`) - }) - - // Check on revisions page. - t.Run("Revision page", func(t *testing.T) { - defer tests.PrintCurrentTest(t)() - - req := NewRequest(t, http.MethodGet, "/user2/repo1/wiki/XSS?action=_revision") - resp := MakeRequest(t, req, http.StatusOK) - htmlDoc := NewHTMLParser(t, resp.Body) - - htmlDoc.AssertElement(t, "script.evil", false) - assert.Contains(t, htmlDoc.Find(".ui.sub.header").Text(), `Gusted edited this page 2024-01-31`) - }) -} - func TestXSSReviewDismissed(t *testing.T) { defer unittest.OverrideFixtures("tests/integration/fixtures/TestXSSReviewDismissed")() defer tests.PrepareTestEnv(t)()