mirror of
https://github.com/golang/go
synced 2024-11-22 01:14:40 -07:00
handle nils safely in Printf.
add some tests for erroneous formats. R=rsc CC=golang-dev https://golang.org/cl/201058
This commit is contained in:
parent
987e1198db
commit
2d7dc0e70c
@ -229,6 +229,11 @@ var fmttests = []fmtTest{
|
|||||||
fmtTest{"%#v", make(chan int), "(chan int)(PTR)"},
|
fmtTest{"%#v", make(chan int), "(chan int)(PTR)"},
|
||||||
fmtTest{"%#v", uint64(1<<64 - 1), "0xffffffffffffffff"},
|
fmtTest{"%#v", uint64(1<<64 - 1), "0xffffffffffffffff"},
|
||||||
fmtTest{"%#v", 1000000000, "1000000000"},
|
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) {
|
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) {
|
func getString(a interface{}) (val string, ok bool) {
|
||||||
|
if a == nil {
|
||||||
|
return "<nil>", ok
|
||||||
|
}
|
||||||
// Is it a regular string or []byte type?
|
// Is it a regular string or []byte type?
|
||||||
switch s := a.(type) {
|
switch s := a.(type) {
|
||||||
case string:
|
case string:
|
||||||
@ -941,8 +944,10 @@ func (p *pp) doprintf(format string, a []interface{}) {
|
|||||||
p.buf.WriteByte('%')
|
p.buf.WriteByte('%')
|
||||||
p.add(c)
|
p.add(c)
|
||||||
p.buf.WriteByte('(')
|
p.buf.WriteByte('(')
|
||||||
p.buf.WriteString(reflect.Typeof(field).String())
|
if field != nil {
|
||||||
p.buf.WriteByte('=')
|
p.buf.WriteString(reflect.Typeof(field).String())
|
||||||
|
p.buf.WriteByte('=')
|
||||||
|
}
|
||||||
p.printField(field, false, false, 0)
|
p.printField(field, false, false, 0)
|
||||||
p.buf.WriteByte(')')
|
p.buf.WriteByte(')')
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user