mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Fix commenting on non-utf8 encoded files (#11916)
* Add comment on non-unicode line to force fail Signed-off-by: Andrew Thornton <art27@cantab.net> * Just quote/unquote patch Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		@@ -86,6 +86,11 @@ func TestAPIPullReview(t *testing.T) {
 | 
			
		||||
			Body:       "first old line",
 | 
			
		||||
			OldLineNum: 1,
 | 
			
		||||
			NewLineNum: 0,
 | 
			
		||||
		}, {
 | 
			
		||||
			Path:       "iso-8859-1.txt",
 | 
			
		||||
			Body:       "this line contains a non-utf-8 character",
 | 
			
		||||
			OldLineNum: 0,
 | 
			
		||||
			NewLineNum: 1,
 | 
			
		||||
		},
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
@@ -93,7 +98,7 @@ func TestAPIPullReview(t *testing.T) {
 | 
			
		||||
	DecodeJSON(t, resp, &review)
 | 
			
		||||
	assert.EqualValues(t, 6, review.ID)
 | 
			
		||||
	assert.EqualValues(t, "PENDING", review.State)
 | 
			
		||||
	assert.EqualValues(t, 2, review.CodeCommentsCount)
 | 
			
		||||
	assert.EqualValues(t, 3, review.CodeCommentsCount)
 | 
			
		||||
 | 
			
		||||
	// test SubmitPullReview
 | 
			
		||||
	req = NewRequestWithJSON(t, http.MethodPost, fmt.Sprintf("/api/v1/repos/%s/%s/pulls/%d/reviews/%d?token=%s", repo.OwnerName, repo.Name, pullIssue.Index, review.ID, token), &api.SubmitPullReviewOptions{
 | 
			
		||||
@@ -104,7 +109,7 @@ func TestAPIPullReview(t *testing.T) {
 | 
			
		||||
	DecodeJSON(t, resp, &review)
 | 
			
		||||
	assert.EqualValues(t, 6, review.ID)
 | 
			
		||||
	assert.EqualValues(t, "APPROVED", review.State)
 | 
			
		||||
	assert.EqualValues(t, 2, review.CodeCommentsCount)
 | 
			
		||||
	assert.EqualValues(t, 3, review.CodeCommentsCount)
 | 
			
		||||
 | 
			
		||||
	// test DeletePullReview
 | 
			
		||||
	req = NewRequestWithJSON(t, http.MethodPost, fmt.Sprintf("/api/v1/repos/%s/%s/pulls/%d/reviews?token=%s", repo.OwnerName, repo.Name, pullIssue.Index, token), &api.CreatePullReviewOptions{
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
xe<><65>N<EFBFBD>0D<>#<23><1F><03>4 
 | 
			
		||||
J<EFBFBD>A<05>5<EFBFBD><35><EFBFBD><EFBFBD>,<2C>x<EFBFBD>zsV<73><56><EFBFBD>5<08>D<EFBFBD><44>ػ<EFBFBD>7<EFBFBD>,=<3D><>o.<13>E卢<45>q5J=<3D><><EFBFBD><EFBFBD><EFBFBD>	r<>=>4<1B><1D>
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -1 +1 @@
 | 
			
		||||
4a357436d925b5c974181ff12a994538ddc5a269
 | 
			
		||||
5f22f7d0d95d614d25a5b68592adb345a4b5c7fd
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,9 @@ import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"unicode/utf8"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
@@ -143,7 +145,8 @@ type Comment struct {
 | 
			
		||||
	RenderedContent string `xorm:"-"`
 | 
			
		||||
 | 
			
		||||
	// Path represents the 4 lines of code cemented by this comment
 | 
			
		||||
	Patch string `xorm:"TEXT"`
 | 
			
		||||
	Patch       string `xorm:"-"`
 | 
			
		||||
	PatchQuoted string `xorm:"TEXT patch"`
 | 
			
		||||
 | 
			
		||||
	CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
 | 
			
		||||
	UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`
 | 
			
		||||
@@ -199,6 +202,33 @@ func (c *Comment) loadIssue(e Engine) (err error) {
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BeforeInsert will be invoked by XORM before inserting a record
 | 
			
		||||
func (c *Comment) BeforeInsert() {
 | 
			
		||||
	c.PatchQuoted = c.Patch
 | 
			
		||||
	if !utf8.ValidString(c.Patch) {
 | 
			
		||||
		c.PatchQuoted = strconv.Quote(c.Patch)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BeforeUpdate will be invoked by XORM before updating a record
 | 
			
		||||
func (c *Comment) BeforeUpdate() {
 | 
			
		||||
	c.PatchQuoted = c.Patch
 | 
			
		||||
	if !utf8.ValidString(c.Patch) {
 | 
			
		||||
		c.PatchQuoted = strconv.Quote(c.Patch)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AfterLoad is invoked from XORM after setting the values of all fields of this object.
 | 
			
		||||
func (c *Comment) AfterLoad(session *xorm.Session) {
 | 
			
		||||
	c.Patch = c.PatchQuoted
 | 
			
		||||
	if len(c.PatchQuoted) > 0 && c.PatchQuoted[0] == '"' {
 | 
			
		||||
		unquoted, err := strconv.Unquote(c.PatchQuoted)
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			c.Patch = unquoted
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Comment) loadPoster(e Engine) (err error) {
 | 
			
		||||
	if c.PosterID <= 0 || c.Poster != nil {
 | 
			
		||||
		return nil
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user