Skip to content

Commit c785af3

Browse files
authored
Merge pull request go-git#475 from michenriksen/revision-fix-endless-loop
revision: fix endless looping in revision parser
2 parents 935af59 + b333364 commit c785af3

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

internal/revision/parser.go

+4
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@ func (p *Parser) parseAt() (Revisioner, error) {
322322
}
323323

324324
return AtDate{t}, nil
325+
case tok == eof:
326+
return nil, &ErrInvalidRevision{s: `missing "}" in @{<data>} structure`}
325327
default:
326328
date += lit
327329
}
@@ -424,6 +426,8 @@ func (p *Parser) parseCaretBraces() (Revisioner, error) {
424426
p.unscan()
425427
case tok != slash && start:
426428
return nil, &ErrInvalidRevision{fmt.Sprintf(`"%s" is not a valid revision suffix brace component`, lit)}
429+
case tok == eof:
430+
return nil, &ErrInvalidRevision{s: `missing "}" in ^{<data>} structure`}
427431
case tok != cbrace:
428432
p.unscan()
429433
re += lit

internal/revision/parser_test.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func (s *ParserSuite) TestParseWithValidExpression(c *C) {
183183
}
184184
}
185185

186-
func (s *ParserSuite) TestParseWithUnValidExpression(c *C) {
186+
func (s *ParserSuite) TestParseWithInvalidExpression(c *C) {
187187
datas := map[string]error{
188188
"..": &ErrInvalidRevision{`must not start with "."`},
189189
"master^1master": &ErrInvalidRevision{`reference must be defined once at the beginning`},
@@ -198,6 +198,9 @@ func (s *ParserSuite) TestParseWithUnValidExpression(c *C) {
198198
"~1": &ErrInvalidRevision{`"~" or "^" statement must have a reference defined at the beginning`},
199199
"master:/test": &ErrInvalidRevision{`":" statement is not valid, could be : :/<regexp>`},
200200
"master:0:README": &ErrInvalidRevision{`":" statement is not valid, could be : :<n>:<path>`},
201+
"^{/": &ErrInvalidRevision{`missing "}" in ^{<data>} structure`},
202+
"~@{": &ErrInvalidRevision{`missing "}" in @{<data>} structure`},
203+
"@@{{0": &ErrInvalidRevision{`missing "}" in @{<data>} structure`},
201204
}
202205

203206
for s, e := range datas {
@@ -230,7 +233,7 @@ func (s *ParserSuite) TestParseAtWithValidExpression(c *C) {
230233
}
231234
}
232235

233-
func (s *ParserSuite) TestParseAtWithUnValidExpression(c *C) {
236+
func (s *ParserSuite) TestParseAtWithInvalidExpression(c *C) {
234237
datas := map[string]error{
235238
"{test}": &ErrInvalidRevision{`wrong date "test" must fit ISO-8601 format : 2006-01-02T15:04:05Z`},
236239
"{-1": &ErrInvalidRevision{`missing "}" in @{-n} structure`},

0 commit comments

Comments
 (0)