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
}