]> source.dussan.org Git - gitea.git/commitdiff
Include encoding in signature payload (#30174) (#30182)
authorGiteabot <teabot@gitea.io>
Fri, 29 Mar 2024 23:03:11 +0000 (07:03 +0800)
committerGitHub <noreply@github.com>
Fri, 29 Mar 2024 23:03:11 +0000 (00:03 +0100)
Backport #30174 by @KN4CK3R

Fixes #30119

Include the encoding in the signature payload.

before

![grafik](https://github.com/go-gitea/gitea/assets/1666336/01ab94a3-8af5-4d6f-be73-a10b65a15421)

after

![grafik](https://github.com/go-gitea/gitea/assets/1666336/3a37d438-c70d-4d69-b178-d170e74aa683)

Co-authored-by: KN4CK3R <admin@oldschoolhack.me>
modules/git/commit_convert_gogit.go
modules/git/commit_reader.go
modules/git/commit_test.go

index 819ea0d1dba3e28db5e0091b06204714ddd97b0b..33ef2f44870209deebed5578a148e409672ce3cc 100644 (file)
@@ -47,6 +47,12 @@ func convertPGPSignature(c *object.Commit) *CommitGPGSignature {
                return nil
        }
 
+       if c.Encoding != "" && c.Encoding != "UTF-8" {
+               if _, err = fmt.Fprintf(&w, "\nencoding %s\n", c.Encoding); err != nil {
+                       return nil
+               }
+       }
+
        if _, err = fmt.Fprintf(&w, "\n\n%s", c.Message); err != nil {
                return nil
        }
index 4809d6c7eda8e9e95a623c9ea7ecfd0a9e75948e..56c41dc473b1d3a5fe3d544dbd522ba82d1a68c2 100644 (file)
@@ -84,6 +84,8 @@ readLoop:
                                commit.Committer = &Signature{}
                                commit.Committer.Decode(data)
                                _, _ = payloadSB.Write(line)
+                       case "encoding":
+                               _, _ = payloadSB.Write(line)
                        case "gpgsig":
                                fallthrough
                        case "gpgsig-sha256": // FIXME: no intertop, so only 1 exists at present.
index e512eecc563be8c72077742be4589601be27001e..a33e7df31adb09256f8d95b561e9f44467b4830f 100644 (file)
@@ -125,6 +125,73 @@ empty commit`, commitFromReader.Signature.Payload)
        assert.EqualValues(t, commitFromReader, commitFromReader2)
 }
 
+func TestCommitWithEncodingFromReader(t *testing.T) {
+       commitString := `feaf4ba6bc635fec442f46ddd4512416ec43c2c2 commit 1074
+tree ca3fad42080dd1a6d291b75acdfc46e5b9b307e5
+parent 47b24e7ab977ed31c5a39989d570847d6d0052af
+author KN4CK3R <admin@oldschoolhack.me> 1711702962 +0100
+committer KN4CK3R <admin@oldschoolhack.me> 1711702962 +0100
+encoding ISO-8859-1
+gpgsig -----BEGIN PGP SIGNATURE-----
+ iQGzBAABCgAdFiEE9HRrbqvYxPT8PXbefPSEkrowAa8FAmYGg7IACgkQfPSEkrow
+ Aa9olwv+P0HhtCM6CRvlUmPaqswRsDPNR4i66xyXGiSxdI9V5oJL7HLiQIM7KrFR
+ gizKa2COiGtugv8fE+TKqXKaJx6uJUJEjaBd8E9Af9PrAzjWj+A84lU6/PgPS8hq
+ zOfZraLOEWRH4tZcS+u2yFLu3ez2Wqh1xW5LNy7xqEedMXEFD1HwSJ0+pjacNkzr
+ frp6Asyt7xRI6YmgFJZJoRsS3Ktr6rtKeRL2IErSQQyorOqj6gKrglhrhfG/114j
+ FKB1v4or0WZ1DE8iP2SJZ3n+/K1IuWAINh7MVdb7PndfBPEa+IL+ucNk5uzEE8Jd
+ G8smGxXUeFEt2cP1dj2W8EgAxuA9sTnH9dqI5aRqy5ifDjuya7Emm8sdOUvtGdmn
+ SONRzusmu5n3DgV956REL7x62h7JuqmBz/12HZkr0z0zgXkcZ04q08pSJATX5N1F
+ yN+tWxTsWg+zhDk96d5Esdo9JMjcFvPv0eioo30GAERaz1hoD7zCMT4jgUFTQwgz
+ jw4YcO5u
+ =r3UU
+ -----END PGP SIGNATURE-----
+
+ISO-8859-1`
+
+       sha := &Sha1Hash{0xfe, 0xaf, 0x4b, 0xa6, 0xbc, 0x63, 0x5f, 0xec, 0x44, 0x2f, 0x46, 0xdd, 0xd4, 0x51, 0x24, 0x16, 0xec, 0x43, 0xc2, 0xc2}
+       gitRepo, err := openRepositoryWithDefaultContext(filepath.Join(testReposDir, "repo1_bare"))
+       assert.NoError(t, err)
+       assert.NotNil(t, gitRepo)
+       defer gitRepo.Close()
+
+       commitFromReader, err := CommitFromReader(gitRepo, sha, strings.NewReader(commitString))
+       assert.NoError(t, err)
+       if !assert.NotNil(t, commitFromReader) {
+               return
+       }
+       assert.EqualValues(t, sha, commitFromReader.ID)
+       assert.EqualValues(t, `-----BEGIN PGP SIGNATURE-----
+
+iQGzBAABCgAdFiEE9HRrbqvYxPT8PXbefPSEkrowAa8FAmYGg7IACgkQfPSEkrow
+Aa9olwv+P0HhtCM6CRvlUmPaqswRsDPNR4i66xyXGiSxdI9V5oJL7HLiQIM7KrFR
+gizKa2COiGtugv8fE+TKqXKaJx6uJUJEjaBd8E9Af9PrAzjWj+A84lU6/PgPS8hq
+zOfZraLOEWRH4tZcS+u2yFLu3ez2Wqh1xW5LNy7xqEedMXEFD1HwSJ0+pjacNkzr
+frp6Asyt7xRI6YmgFJZJoRsS3Ktr6rtKeRL2IErSQQyorOqj6gKrglhrhfG/114j
+FKB1v4or0WZ1DE8iP2SJZ3n+/K1IuWAINh7MVdb7PndfBPEa+IL+ucNk5uzEE8Jd
+G8smGxXUeFEt2cP1dj2W8EgAxuA9sTnH9dqI5aRqy5ifDjuya7Emm8sdOUvtGdmn
+SONRzusmu5n3DgV956REL7x62h7JuqmBz/12HZkr0z0zgXkcZ04q08pSJATX5N1F
+yN+tWxTsWg+zhDk96d5Esdo9JMjcFvPv0eioo30GAERaz1hoD7zCMT4jgUFTQwgz
+jw4YcO5u
+=r3UU
+-----END PGP SIGNATURE-----
+`, commitFromReader.Signature.Signature)
+       assert.EqualValues(t, `tree ca3fad42080dd1a6d291b75acdfc46e5b9b307e5
+parent 47b24e7ab977ed31c5a39989d570847d6d0052af
+author KN4CK3R <admin@oldschoolhack.me> 1711702962 +0100
+committer KN4CK3R <admin@oldschoolhack.me> 1711702962 +0100
+encoding ISO-8859-1
+
+ISO-8859-1`, commitFromReader.Signature.Payload)
+       assert.EqualValues(t, "KN4CK3R <admin@oldschoolhack.me>", commitFromReader.Author.String())
+
+       commitFromReader2, err := CommitFromReader(gitRepo, sha, strings.NewReader(commitString+"\n\n"))
+       assert.NoError(t, err)
+       commitFromReader.CommitMessage += "\n\n"
+       commitFromReader.Signature.Payload += "\n\n"
+       assert.EqualValues(t, commitFromReader, commitFromReader2)
+}
+
 func TestHasPreviousCommit(t *testing.T) {
        bareRepo1Path := filepath.Join(testReposDir, "repo1_bare")