fork of go-git with some jj specific features

Merge pull request #475 from michenriksen/revision-fix-endless-loop

revision: fix endless looping in revision parser

authored by Máximo Cuadros and committed by GitHub c785af3f 935af59c

Changed files
+9 -2
internal
+4
internal/revision/parser.go
··· 322 322 } 323 323 324 324 return AtDate{t}, nil 325 + case tok == eof: 326 + return nil, &ErrInvalidRevision{s: `missing "}" in @{<data>} structure`} 325 327 default: 326 328 date += lit 327 329 } ··· 424 426 p.unscan() 425 427 case tok != slash && start: 426 428 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`} 427 431 case tok != cbrace: 428 432 p.unscan() 429 433 re += lit
+5 -2
internal/revision/parser_test.go
··· 183 183 } 184 184 } 185 185 186 - func (s *ParserSuite) TestParseWithUnValidExpression(c *C) { 186 + func (s *ParserSuite) TestParseWithInvalidExpression(c *C) { 187 187 datas := map[string]error{ 188 188 "..": &ErrInvalidRevision{`must not start with "."`}, 189 189 "master^1master": &ErrInvalidRevision{`reference must be defined once at the beginning`}, ··· 198 198 "~1": &ErrInvalidRevision{`"~" or "^" statement must have a reference defined at the beginning`}, 199 199 "master:/test": &ErrInvalidRevision{`":" statement is not valid, could be : :/<regexp>`}, 200 200 "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`}, 201 204 } 202 205 203 206 for s, e := range datas { ··· 230 233 } 231 234 } 232 235 233 - func (s *ParserSuite) TestParseAtWithUnValidExpression(c *C) { 236 + func (s *ParserSuite) TestParseAtWithInvalidExpression(c *C) { 234 237 datas := map[string]error{ 235 238 "{test}": &ErrInvalidRevision{`wrong date "test" must fit ISO-8601 format : 2006-01-02T15:04:05Z`}, 236 239 "{-1": &ErrInvalidRevision{`missing "}" in @{-n} structure`},