mirror of
https://github.com/golang/go
synced 2024-11-21 22:04:39 -07:00
go/scanner: don't accept '\x0g' character escape (bug fix)
Added more test cases. R=rsc CC=golang-dev https://golang.org/cl/2804041
This commit is contained in:
parent
6dc4c58f87
commit
68ac0c1d94
@ -368,15 +368,19 @@ func (S *Scanner) scanEscape(quote int) {
|
||||
}
|
||||
|
||||
var x uint32
|
||||
for ; i > 0; i-- {
|
||||
for ; i > 0 && S.ch != quote && S.ch >= 0; i-- {
|
||||
d := uint32(digitVal(S.ch))
|
||||
if d > base {
|
||||
if d >= base {
|
||||
S.error(S.pos, "illegal character in escape sequence")
|
||||
return
|
||||
break
|
||||
}
|
||||
x = x*base + d
|
||||
S.next()
|
||||
}
|
||||
// in case of an error, consume remaining chars
|
||||
for ; i > 0 && S.ch != quote && S.ch >= 0; i-- {
|
||||
S.next()
|
||||
}
|
||||
if x > max || 0xd800 <= x && x < 0xe000 {
|
||||
S.error(pos, "escape sequence is invalid Unicode code point")
|
||||
}
|
||||
|
@ -610,8 +610,18 @@ var errors = []struct {
|
||||
pos int
|
||||
err string
|
||||
}{
|
||||
{"\"\"", token.STRING, 0, ""},
|
||||
{"\"", token.STRING, 0, "string not terminated"},
|
||||
{`#`, token.ILLEGAL, 0, "illegal character '#' (U+23)"},
|
||||
{`' '`, token.CHAR, 0, ""},
|
||||
{`''`, token.CHAR, 0, "illegal character literal"},
|
||||
{`'\8'`, token.CHAR, 2, "unknown escape sequence"},
|
||||
{`'\08'`, token.CHAR, 3, "illegal character in escape sequence"},
|
||||
{`'\x0g'`, token.CHAR, 4, "illegal character in escape sequence"},
|
||||
{`'\Uffffffff'`, token.CHAR, 2, "escape sequence is invalid Unicode code point"},
|
||||
{`'`, token.CHAR, 0, "character literal not terminated"},
|
||||
{`""`, token.STRING, 0, ""},
|
||||
{`"`, token.STRING, 0, "string not terminated"},
|
||||
{"``", token.STRING, 0, ""},
|
||||
{"`", token.STRING, 0, "string not terminated"},
|
||||
{"/**/", token.COMMENT, 0, ""},
|
||||
{"/*", token.COMMENT, 0, "comment not terminated"},
|
||||
{"//\n", token.COMMENT, 0, ""},
|
||||
|
Loading…
Reference in New Issue
Block a user