]> Cypherpunks repositories - gostls13.git/commitdiff
strconv.Uitob64: allow conversion of 64-bit binaries (buffer was too small).
authorRob Pike <r@golang.org>
Thu, 1 Jul 2010 21:44:21 +0000 (14:44 -0700)
committerRob Pike <r@golang.org>
Thu, 1 Jul 2010 21:44:21 +0000 (14:44 -0700)
panic if base is invalid.

R=rsc
CC=golang-dev
https://golang.org/cl/1702050

src/pkg/strconv/itoa.go
src/pkg/strconv/itoa_test.go

index a6335605374aac1054d79ae45c34cbad0be5e7f2..a0a7496641e5e50e0303962403218f9bd895910f 100644 (file)
@@ -6,12 +6,15 @@ package strconv
 
 // Uitob64 returns the string representation of i in the given base.
 func Uitob64(u uint64, base uint) string {
+       if base < 2 || 36 < base {
+               panic("invalid base " + Uitoa(base))
+       }
        if u == 0 {
                return "0"
        }
 
        // Assemble decimal in reverse order.
-       var buf [32]byte
+       var buf [64]byte
        j := len(buf)
        b := uint64(base)
        for u > 0 {
index e0624b547c0b162563876503dda5412f72c9fbc0..039ef444688e77e59e5443edc90f1ba4f2de6eaf 100644 (file)
@@ -50,6 +50,7 @@ var itob64tests = []itob64Test{
        itob64Test{16, 16, "10"},
        itob64Test{-0x123456789abcdef, 16, "-123456789abcdef"},
        itob64Test{1<<63 - 1, 16, "7fffffffffffffff"},
+       itob64Test{1<<63 - 1, 2, "111111111111111111111111111111111111111111111111111111111111111"},
 
        itob64Test{16, 17, "g"},
        itob64Test{25, 25, "10"},
@@ -135,6 +136,7 @@ var uitob64tests = []uitob64Test{
        uitob64Test{1<<63 + 1, 10, "9223372036854775809"},
        uitob64Test{1<<64 - 2, 10, "18446744073709551614"},
        uitob64Test{1<<64 - 1, 10, "18446744073709551615"},
+       uitob64Test{1<<64 - 1, 2, "1111111111111111111111111111111111111111111111111111111111111111"},
 }
 
 func TestUitoa(t *testing.T) {