mirror of
https://github.com/golang/go
synced 2024-11-25 07:07:57 -07:00
template: fix deadlock.
No need for lexInsideAction to loop. Fixes #2217. R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/4963054
This commit is contained in:
parent
5edeef214d
commit
2cf66c1d94
@ -278,7 +278,6 @@ func lexInsideAction(l *lexer) stateFn {
|
|||||||
// Either number, quoted string, or identifier.
|
// Either number, quoted string, or identifier.
|
||||||
// Spaces separate and are ignored.
|
// Spaces separate and are ignored.
|
||||||
// Pipe symbols separate and are emitted.
|
// Pipe symbols separate and are emitted.
|
||||||
for {
|
|
||||||
if strings.HasPrefix(l.input[l.pos:], rightDelim) {
|
if strings.HasPrefix(l.input[l.pos:], rightDelim) {
|
||||||
return lexRightDelim
|
return lexRightDelim
|
||||||
}
|
}
|
||||||
@ -323,8 +322,7 @@ func lexInsideAction(l *lexer) stateFn {
|
|||||||
default:
|
default:
|
||||||
return l.errorf("unrecognized character in action: %#U", r)
|
return l.errorf("unrecognized character in action: %#U", r)
|
||||||
}
|
}
|
||||||
}
|
return lexInsideAction
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// lexIdentifier scans an alphanumeric or field.
|
// lexIdentifier scans an alphanumeric or field.
|
||||||
|
@ -184,6 +184,20 @@ var lexTests = []lexTest{
|
|||||||
tLeft,
|
tLeft,
|
||||||
{itemError, `bad number syntax: "3k"`},
|
{itemError, `bad number syntax: "3k"`},
|
||||||
}},
|
}},
|
||||||
|
|
||||||
|
// Fixed bugs
|
||||||
|
// Many elements in an action blew the lookahead until
|
||||||
|
// we made lexInsideAction not loop.
|
||||||
|
{"long pipeline deadlock", "{{|||||}}", []item{
|
||||||
|
tLeft,
|
||||||
|
tPipe,
|
||||||
|
tPipe,
|
||||||
|
tPipe,
|
||||||
|
tPipe,
|
||||||
|
tPipe,
|
||||||
|
tRight,
|
||||||
|
tEOF,
|
||||||
|
}},
|
||||||
}
|
}
|
||||||
|
|
||||||
// collect gathers the emitted items into a slice.
|
// collect gathers the emitted items into a slice.
|
||||||
|
Loading…
Reference in New Issue
Block a user