mirror of
https://github.com/golang/go
synced 2024-11-22 06:14:39 -07:00
text/scanner: report illegal hexadecimal numbers (bug fix)
R=r CC=golang-dev https://golang.org/cl/6450136
This commit is contained in:
parent
2ab18f69a6
commit
ace14d01bd
@ -389,15 +389,20 @@ func (s *Scanner) scanNumber(ch rune) (rune, rune) {
|
||||
if ch == 'x' || ch == 'X' {
|
||||
// hexadecimal int
|
||||
ch = s.next()
|
||||
hasMantissa := false
|
||||
for digitVal(ch) < 16 {
|
||||
ch = s.next()
|
||||
hasMantissa = true
|
||||
}
|
||||
if !hasMantissa {
|
||||
s.error("illegal hexadecimal number")
|
||||
}
|
||||
} else {
|
||||
// octal int or float
|
||||
seenDecimalDigit := false
|
||||
has8or9 := false
|
||||
for isDecimal(ch) {
|
||||
if ch > '7' {
|
||||
seenDecimalDigit = true
|
||||
has8or9 = true
|
||||
}
|
||||
ch = s.next()
|
||||
}
|
||||
@ -408,7 +413,7 @@ func (s *Scanner) scanNumber(ch rune) (rune, rune) {
|
||||
return Float, ch
|
||||
}
|
||||
// octal int
|
||||
if seenDecimalDigit {
|
||||
if has8or9 {
|
||||
s.error("illegal octal number")
|
||||
}
|
||||
}
|
||||
|
@ -446,6 +446,9 @@ func TestError(t *testing.T) {
|
||||
testError(t, `"\'"`, "1:3", "illegal char escape", String)
|
||||
|
||||
testError(t, `01238`, "1:6", "illegal octal number", Int)
|
||||
testError(t, `01238123`, "1:9", "illegal octal number", Int)
|
||||
testError(t, `0x`, "1:3", "illegal hexadecimal number", Int)
|
||||
testError(t, `0xg`, "1:3", "illegal hexadecimal number", Int)
|
||||
testError(t, `'aa'`, "1:4", "illegal char literal", Char)
|
||||
|
||||
testError(t, `'`, "1:2", "literal not terminated", Char)
|
||||
|
Loading…
Reference in New Issue
Block a user