]> Cypherpunks repositories - gostls13.git/commitdiff
text/scanner: report illegal hexadecimal numbers (bug fix)
authorRobert Griesemer <gri@golang.org>
Wed, 15 Aug 2012 18:09:34 +0000 (11:09 -0700)
committerRobert Griesemer <gri@golang.org>
Wed, 15 Aug 2012 18:09:34 +0000 (11:09 -0700)
R=r
CC=golang-dev
https://golang.org/cl/6450136

src/pkg/text/scanner/scanner.go
src/pkg/text/scanner/scanner_test.go

index 565650edf9c05f07f40f0c3ad0b3fbb600744274..6492d322f824c08fac1cb57a27d36bb0b411f50c 100644 (file)
@@ -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")
                        }
                }
index bb3adb55a77fdf2617a63d8d7319012970fd00f2..be3998a35adc4e513bf489602fc607675279a9e7 100644 (file)
@@ -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)