fmt: fix bug in UnreadRune: must clear memory of previous rune if input implements UnreadRune; otherwise the lookahead will lie. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/4548082
diff --git a/src/pkg/fmt/scan.go b/src/pkg/fmt/scan.go index 2aade02..dd8548c 100644 --- a/src/pkg/fmt/scan.go +++ b/src/pkg/fmt/scan.go
@@ -226,20 +226,12 @@ } func (s *ss) UnreadRune() os.Error { - // Don't use strings.Reader.UnreadRune for now - appears to cause a problem. - // TODO(r, gri): Fix this and remove code between --- lines! - // --- - if _, ok := s.rr.(*strings.Reader); ok { - s.peekRune = s.prevRune - s.count-- - return nil - } - // --- if u, ok := s.rr.(runeUnreader); ok { u.UnreadRune() } else { s.peekRune = s.prevRune } + s.prevRune = -1 s.count-- return nil }