Commit 2d7dc0e7 authored by Rob Pike's avatar Rob Pike

handle nils safely in Printf.

add some tests for erroneous formats.

R=rsc
CC=golang-dev
https://golang.org/cl/201058
parent 987e1198
......@@ -229,6 +229,11 @@ var fmttests = []fmtTest{
fmtTest{"%#v", make(chan int), "(chan int)(PTR)"},
fmtTest{"%#v", uint64(1<<64 - 1), "0xffffffffffffffff"},
fmtTest{"%#v", 1000000000, "1000000000"},
// erroneous things
fmtTest{"%d", "hello", "%d(string=hello)"},
fmtTest{"no args", "hello", "no args?(extra string=hello)"},
fmtTest{"%s", nil, "%s(<nil>)"},
}
func TestSprintf(t *testing.T) {
......
......@@ -378,6 +378,9 @@ func getInt(a interface{}) (val int64, signed, ok bool) {
}
func getString(a interface{}) (val string, ok bool) {
if a == nil {
return "<nil>", ok
}
// Is it a regular string or []byte type?
switch s := a.(type) {
case string:
......@@ -941,8 +944,10 @@ func (p *pp) doprintf(format string, a []interface{}) {
p.buf.WriteByte('%')
p.add(c)
p.buf.WriteByte('(')
p.buf.WriteString(reflect.Typeof(field).String())
p.buf.WriteByte('=')
if field != nil {
p.buf.WriteString(reflect.Typeof(field).String())
p.buf.WriteByte('=')
}
p.printField(field, false, false, 0)
p.buf.WriteByte(')')
}
......
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