From 6fd4d29ced4d0a45434ed40f615df03cfcd94799 Mon Sep 17 00:00:00 2001 From: Andrew Tunnell-Jones Date: Sat, 1 Mar 2014 02:42:47 +0000 Subject: [PATCH] Fix bounds overflow in sprintTxt Passing excessively long strings (>256*4+3) to sprintTxt would result in overflowing src. Fix isn't as efficient but simplifies the code. --- types.go | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/types.go b/types.go index 47c5e750..19058c15 100644 --- a/types.go +++ b/types.go @@ -458,28 +458,23 @@ func sprintDomain(s string) string { } func sprintTxt(txt []string) string { - const maxLen = 256*4 + 3 var out []byte - srcTmp := make([]byte, maxLen) - dstTmp := make([]byte, maxLen) for i, s := range txt { - src := srcTmp[0:len(s)] - copy(src, s) - dst := dstTmp[0:0:maxLen] if i > 0 { - dst = append(dst, ' ') + out = append(out, ` "`...) + } else { + out = append(out, '"') } - dst = append(dst, '"') - for j := 0; j < len(s); { - b, n := nextByte(src, j) + bs := []byte(s) + for j := 0; j < len(bs); { + b, n := nextByte(bs, j) if n == 0 { break } - dst = appendTXTStringByte(dst, b) + out = appendTXTStringByte(out, b) j += n } - dst = append(dst, '"') - out = append(out, dst...) + out = append(out, '"') } return string(out) }