forked from gitea/gitea
		
	Fix git.parseTagData (#14105)
* Fix git.parseTagData() close #14092 * Add Test * add message to test * limit readers * git tag -m trims and terminates with a newline Co-authored-by: Andrew Thornton <art27@cantab.net> Co-authored-by: 6543 <6543@obermui.de>
This commit is contained in:
		
							parent
							
								
									30edcd5c71
								
							
						
					
					
						commit
						27fa4814b8
					
				| @ -50,7 +50,7 @@ func TestAPIGitTags(t *testing.T) { | ||||
| 	assert.Equal(t, aTagName, tag.Tag) | ||||
| 	assert.Equal(t, aTag.ID.String(), tag.SHA) | ||||
| 	assert.Equal(t, commit.ID.String(), tag.Object.SHA) | ||||
| 	assert.Equal(t, aTagMessage, tag.Message) | ||||
| 	assert.Equal(t, aTagMessage+"\n", tag.Message) | ||||
| 	assert.Equal(t, user.Name, tag.Tagger.Name) | ||||
| 	assert.Equal(t, user.Email, tag.Tagger.Email) | ||||
| 	assert.Equal(t, util.URLJoin(repo.APIURL(), "git/tags", aTag.ID.String()), tag.URL) | ||||
|  | ||||
| @ -33,7 +33,7 @@ func (repo *Repository) getTree(id SHA1) (*Tree, error) { | ||||
| 
 | ||||
| 	bufReader := bufio.NewReader(stdoutReader) | ||||
| 	// ignore the SHA | ||||
| 	_, typ, _, err := ReadBatchLine(bufReader) | ||||
| 	_, typ, size, err := ReadBatchLine(bufReader) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| @ -41,7 +41,7 @@ func (repo *Repository) getTree(id SHA1) (*Tree, error) { | ||||
| 	switch typ { | ||||
| 	case "tag": | ||||
| 		resolvedID := id | ||||
| 		data, err := ioutil.ReadAll(bufReader) | ||||
| 		data, err := ioutil.ReadAll(io.LimitReader(bufReader, size)) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| @ -57,7 +57,7 @@ func (repo *Repository) getTree(id SHA1) (*Tree, error) { | ||||
| 		log("tag.commit.Tree: %s %v", commit.Tree.ID.String(), commit.Tree.repo) | ||||
| 		return &commit.Tree, nil | ||||
| 	case "commit": | ||||
| 		commit, err := CommitFromReader(repo, id, bufReader) | ||||
| 		commit, err := CommitFromReader(repo, id, io.LimitReader(bufReader, size)) | ||||
| 		if err != nil { | ||||
| 			_ = stdoutReader.CloseWithError(err) | ||||
| 			return nil, err | ||||
|  | ||||
| @ -64,7 +64,7 @@ l: | ||||
| 			} | ||||
| 			nextline += eol + 1 | ||||
| 		case eol == 0: | ||||
| 			tag.Message = string(data[nextline+1 : len(data)-1]) | ||||
| 			tag.Message = string(data[nextline+1:]) | ||||
| 			break l | ||||
| 		default: | ||||
| 			break l | ||||
|  | ||||
							
								
								
									
										76
									
								
								modules/git/tag_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								modules/git/tag_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | ||||
| // Copyright 2020 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package git | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| func Test_parseTagData(t *testing.T) { | ||||
| 	testData := []struct { | ||||
| 		data []byte | ||||
| 		tag  Tag | ||||
| 	}{ | ||||
| 		{data: []byte(`object 3b114ab800c6432ad42387ccf6bc8d4388a2885a | ||||
| type commit | ||||
| tag 1.22.0 | ||||
| tagger Lucas Michot <lucas@semalead.com> 1484491741 +0100 | ||||
| 
 | ||||
| `), tag: Tag{ | ||||
| 			Name:      "", | ||||
| 			ID:        SHA1{}, | ||||
| 			repo:      nil, | ||||
| 			Object:    SHA1{0x3b, 0x11, 0x4a, 0xb8, 0x0, 0xc6, 0x43, 0x2a, 0xd4, 0x23, 0x87, 0xcc, 0xf6, 0xbc, 0x8d, 0x43, 0x88, 0xa2, 0x88, 0x5a}, | ||||
| 			Type:      "commit", | ||||
| 			Tagger:    &Signature{Name: "Lucas Michot", Email: "lucas@semalead.com", When: time.Unix(1484491741, 0)}, | ||||
| 			Message:   "", | ||||
| 			Signature: nil, | ||||
| 		}}, | ||||
| 		{data: []byte(`object 7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc | ||||
| type commit | ||||
| tag 1.22.1 | ||||
| tagger Lucas Michot <lucas@semalead.com> 1484553735 +0100 | ||||
| 
 | ||||
| test message | ||||
| o | ||||
| 
 | ||||
| ono`), tag: Tag{ | ||||
| 			Name:      "", | ||||
| 			ID:        SHA1{}, | ||||
| 			repo:      nil, | ||||
| 			Object:    SHA1{0x7c, 0xdf, 0x42, 0xc0, 0xb1, 0xcc, 0x76, 0x3a, 0xb7, 0xe4, 0xc3, 0x3c, 0x47, 0xa2, 0x4e, 0x27, 0xc6, 0x6b, 0xfc, 0xcc}, | ||||
| 			Type:      "commit", | ||||
| 			Tagger:    &Signature{Name: "Lucas Michot", Email: "lucas@semalead.com", When: time.Unix(1484553735, 0)}, | ||||
| 			Message:   "test message\no\n\nono", | ||||
| 			Signature: nil, | ||||
| 		}}, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, test := range testData { | ||||
| 		tag, err := parseTagData(test.data) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.EqualValues(t, test.tag.ID, tag.ID) | ||||
| 		assert.EqualValues(t, test.tag.Object, tag.Object) | ||||
| 		assert.EqualValues(t, test.tag.Name, tag.Name) | ||||
| 		assert.EqualValues(t, test.tag.Message, tag.Message) | ||||
| 		assert.EqualValues(t, test.tag.Type, tag.Type) | ||||
| 		if test.tag.Signature != nil && assert.NotNil(t, tag.Signature) { | ||||
| 			assert.EqualValues(t, test.tag.Signature.Signature, tag.Signature.Signature) | ||||
| 			assert.EqualValues(t, test.tag.Signature.Payload, tag.Signature.Payload) | ||||
| 		} else { | ||||
| 			assert.Nil(t, tag.Signature) | ||||
| 		} | ||||
| 		if test.tag.Tagger != nil && assert.NotNil(t, tag.Tagger) { | ||||
| 			assert.EqualValues(t, test.tag.Tagger.Name, tag.Tagger.Name) | ||||
| 			assert.EqualValues(t, test.tag.Tagger.Email, tag.Tagger.Email) | ||||
| 			assert.EqualValues(t, test.tag.Tagger.When.Unix(), tag.Tagger.When.Unix()) | ||||
| 		} else { | ||||
| 			assert.Nil(t, tag.Tagger) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 6543
						6543