From: Robert Griesemer Date: Wed, 15 Aug 2012 18:09:34 +0000 (-0700) Subject: text/scanner: report illegal hexadecimal numbers (bug fix) X-Git-Tag: go1.1rc2~2643 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ace14d01bda6f8384dea8ab7307e657d80471054;p=gostls13.git text/scanner: report illegal hexadecimal numbers (bug fix) R=r CC=golang-dev https://golang.org/cl/6450136 --- diff --git a/src/pkg/text/scanner/scanner.go b/src/pkg/text/scanner/scanner.go index 565650edf9..6492d322f8 100644 --- a/src/pkg/text/scanner/scanner.go +++ b/src/pkg/text/scanner/scanner.go @@ -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") } } diff --git a/src/pkg/text/scanner/scanner_test.go b/src/pkg/text/scanner/scanner_test.go index bb3adb55a7..be3998a35a 100644 --- a/src/pkg/text/scanner/scanner_test.go +++ b/src/pkg/text/scanner/scanner_test.go @@ -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)