Skip to content

Commit

Permalink
Merge pull request #475 from michenriksen/revision-fix-endless-loop
Browse files Browse the repository at this point in the history
revision: fix endless looping in revision parser
  • Loading branch information
mcuadros committed Feb 24, 2022
2 parents 935af59 + b333364 commit c785af3
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
4 changes: 4 additions & 0 deletions internal/revision/parser.go
Expand Up @@ -322,6 +322,8 @@ func (p *Parser) parseAt() (Revisioner, error) {
}

return AtDate{t}, nil
case tok == eof:
return nil, &ErrInvalidRevision{s: `missing "}" in @{<data>} structure`}
default:
date += lit
}
Expand Down Expand Up @@ -424,6 +426,8 @@ func (p *Parser) parseCaretBraces() (Revisioner, error) {
p.unscan()
case tok != slash && start:
return nil, &ErrInvalidRevision{fmt.Sprintf(`"%s" is not a valid revision suffix brace component`, lit)}
case tok == eof:
return nil, &ErrInvalidRevision{s: `missing "}" in ^{<data>} structure`}
case tok != cbrace:
p.unscan()
re += lit
Expand Down
7 changes: 5 additions & 2 deletions internal/revision/parser_test.go
Expand Up @@ -183,7 +183,7 @@ func (s *ParserSuite) TestParseWithValidExpression(c *C) {
}
}

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

for s, e := range datas {
Expand Down Expand Up @@ -230,7 +233,7 @@ func (s *ParserSuite) TestParseAtWithValidExpression(c *C) {
}
}

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

0 comments on commit c785af3

Please sign in to comment.