From d246eedcaa5105450ecfe72b626e955147c383b2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20Mo=CC=88hrmann?= Date: Thu, 10 Mar 2016 12:33:33 +0100 Subject: [PATCH] fmt: integer formatting should not permanently change padding Changes the integer function to restore the original f.zero value and therefore padding type before returning. Change-Id: I456449259a3d39bd6d62e110553120c31ec63f23 Reviewed-on: https://go-review.googlesource.com/20512 Reviewed-by: Rob Pike Run-TryBot: Rob Pike TryBot-Result: Gobot Gobot --- src/fmt/fmt_test.go | 3 +++ src/fmt/format.go | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/fmt/fmt_test.go b/src/fmt/fmt_test.go index 55f46dd833..cc4c71cb09 100644 --- a/src/fmt/fmt_test.go +++ b/src/fmt/fmt_test.go @@ -914,6 +914,9 @@ var fmtTests = []struct { {"%06v", []interface{}{+10.0 + 10i, 10}, "[(000010+00010i) 000010]"}, {"%06v", []interface{}{-10.0 + 10i, 10}, "[(-00010+00010i) 000010]"}, + // integer formatting should not alter padding for other elements. + {"%03.6v", []interface{}{1, 2.0, "x"}, "[000001 002 00x]"}, + // Complex fmt used to leave the plus flag set for future entries in the array // causing +2+0i and +3+0i instead of 2+0i and 3+0i. {"%v", []complex64{1, 2, 3}, "[(1+0i) (2+0i) (3+0i)]"}, diff --git a/src/fmt/format.go b/src/fmt/format.go index b6786b9aed..1c612c1218 100644 --- a/src/fmt/format.go +++ b/src/fmt/format.go @@ -221,6 +221,7 @@ func (f *fmt) integer(a int64, base uint64, signedness bool, digits string) { // two ways to ask for extra leading zero digits: %.3d or %03d. // apparently the first cancels the second. + oldZero := f.zero // f.zero is used in f.pad but modified below; restored at end of function. prec := 0 if f.precPresent { prec = f.prec @@ -305,6 +306,7 @@ func (f *fmt) integer(a int64, base uint64, signedness bool, digits string) { } f.pad(buf[i:]) + f.zero = oldZero } // truncate truncates the string to the specified precision, if present. -- 2.48.1