mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09: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