mirror of
https://github.com/golang/go
synced 2024-11-11 19:41:36 -07:00
fmt: don't unread eof scanning %x
When scanning a hex byte at EOF, the code was ungetting the eof, which backed up the input and caused double-scanning of a byte. Delete the call to UnreadRune. This line appeared in 1.5 for some reason; it was not in 1.4 and should be removed again for 1.5 Fixes #12090. Change-Id: Iad1ce8e7db8ec26615c5271310f4b0228cca7d78 Reviewed-on: https://go-review.googlesource.com/13461 Reviewed-by: Andrew Gerrand <adg@golang.org>
This commit is contained in:
parent
e7f4df7332
commit
fe3d8d4db0
@ -888,7 +888,6 @@ func hexDigit(d rune) (int, bool) {
|
||||
func (s *ss) hexByte() (b byte, ok bool) {
|
||||
rune1 := s.getRune()
|
||||
if rune1 == eof {
|
||||
s.UnreadRune()
|
||||
return
|
||||
}
|
||||
value1, ok := hexDigit(rune1)
|
||||
|
@ -1128,3 +1128,31 @@ func TestScanfNewlineMatchFormat(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Test for issue 12090: Was unreading at EOF, double-scanning a byte.
|
||||
|
||||
type hexBytes [2]byte
|
||||
|
||||
func (h *hexBytes) Scan(ss ScanState, verb rune) error {
|
||||
var b []byte
|
||||
_, err := Fscanf(ss, "%4x", &b)
|
||||
if err != nil {
|
||||
panic(err) // Really shouldn't happen.
|
||||
}
|
||||
copy((*h)[:], b)
|
||||
return err
|
||||
}
|
||||
|
||||
func TestHexByte(t *testing.T) {
|
||||
var h hexBytes
|
||||
n, err := Sscanln("0123\n", &h)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if n != 1 {
|
||||
t.Fatalf("expected 1 item; scanned %d", n)
|
||||
}
|
||||
if h[0] != 0x01 || h[1] != 0x23 {
|
||||
t.Fatalf("expected 0123 got %x", h)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user