Commit 68ac0c1d authored by Robert Griesemer's avatar Robert Griesemer

go/scanner: don't accept '\x0g' character escape (bug fix)

Added more test cases.

R=rsc
CC=golang-dev
https://golang.org/cl/2804041
parent 6dc4c58f
......@@ -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, ""},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment