Commit dc6a95e9 authored by Rob Pike's avatar Rob Pike

strconv.Uitob64: allow conversion of 64-bit binaries (buffer was too small).

panic if base is invalid.

R=rsc
CC=golang-dev
https://golang.org/cl/1702050
parent 38f1231f
...@@ -6,12 +6,15 @@ package strconv ...@@ -6,12 +6,15 @@ package strconv
// Uitob64 returns the string representation of i in the given base. // Uitob64 returns the string representation of i in the given base.
func Uitob64(u uint64, base uint) string { func Uitob64(u uint64, base uint) string {
if base < 2 || 36 < base {
panic("invalid base " + Uitoa(base))
}
if u == 0 { if u == 0 {
return "0" return "0"
} }
// Assemble decimal in reverse order. // Assemble decimal in reverse order.
var buf [32]byte var buf [64]byte
j := len(buf) j := len(buf)
b := uint64(base) b := uint64(base)
for u > 0 { for u > 0 {
......
...@@ -50,6 +50,7 @@ var itob64tests = []itob64Test{ ...@@ -50,6 +50,7 @@ var itob64tests = []itob64Test{
itob64Test{16, 16, "10"}, itob64Test{16, 16, "10"},
itob64Test{-0x123456789abcdef, 16, "-123456789abcdef"}, itob64Test{-0x123456789abcdef, 16, "-123456789abcdef"},
itob64Test{1<<63 - 1, 16, "7fffffffffffffff"}, itob64Test{1<<63 - 1, 16, "7fffffffffffffff"},
itob64Test{1<<63 - 1, 2, "111111111111111111111111111111111111111111111111111111111111111"},
itob64Test{16, 17, "g"}, itob64Test{16, 17, "g"},
itob64Test{25, 25, "10"}, itob64Test{25, 25, "10"},
...@@ -135,6 +136,7 @@ var uitob64tests = []uitob64Test{ ...@@ -135,6 +136,7 @@ var uitob64tests = []uitob64Test{
uitob64Test{1<<63 + 1, 10, "9223372036854775809"}, uitob64Test{1<<63 + 1, 10, "9223372036854775809"},
uitob64Test{1<<64 - 2, 10, "18446744073709551614"}, uitob64Test{1<<64 - 2, 10, "18446744073709551614"},
uitob64Test{1<<64 - 1, 10, "18446744073709551615"}, uitob64Test{1<<64 - 1, 10, "18446744073709551615"},
uitob64Test{1<<64 - 1, 2, "1111111111111111111111111111111111111111111111111111111111111111"},
} }
func TestUitoa(t *testing.T) { func TestUitoa(t *testing.T) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment