mirror of
https://github.com/miekg/dns.git
synced 2025-08-08 10:36:59 +02:00
Replace unpackTxtString with identical unpackString (#751)
These two functions were identical (sans-variable names) before I optimized unpackString in5debfeec63
. This will improve the performance of it's only caller unpackTxt and is covered by the test and benchmark added in5debfeec63
.
This commit is contained in:
parent
94dab88533
commit
f195b71879
35
msg.go
35
msg.go
@ -512,7 +512,7 @@ func unpackTxt(msg []byte, off0 int) (ss []string, off int, err error) {
|
|||||||
off = off0
|
off = off0
|
||||||
var s string
|
var s string
|
||||||
for off < len(msg) && err == nil {
|
for off < len(msg) && err == nil {
|
||||||
s, off, err = unpackTxtString(msg, off)
|
s, off, err = unpackString(msg, off)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
ss = append(ss, s)
|
ss = append(ss, s)
|
||||||
}
|
}
|
||||||
@ -520,39 +520,6 @@ func unpackTxt(msg []byte, off0 int) (ss []string, off int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func unpackTxtString(msg []byte, offset int) (string, int, error) {
|
|
||||||
if offset+1 > len(msg) {
|
|
||||||
return "", offset, &Error{err: "overflow unpacking txt"}
|
|
||||||
}
|
|
||||||
l := int(msg[offset])
|
|
||||||
if offset+l+1 > len(msg) {
|
|
||||||
return "", offset, &Error{err: "overflow unpacking txt"}
|
|
||||||
}
|
|
||||||
s := make([]byte, 0, l)
|
|
||||||
for _, b := range msg[offset+1 : offset+1+l] {
|
|
||||||
switch b {
|
|
||||||
case '"', '\\':
|
|
||||||
s = append(s, '\\', b)
|
|
||||||
default:
|
|
||||||
if b < 32 || b > 127 { // unprintable
|
|
||||||
var buf [3]byte
|
|
||||||
bufs := strconv.AppendInt(buf[:0], int64(b), 10)
|
|
||||||
s = append(s, '\\')
|
|
||||||
for i := 0; i < 3-len(bufs); i++ {
|
|
||||||
s = append(s, '0')
|
|
||||||
}
|
|
||||||
for _, r := range bufs {
|
|
||||||
s = append(s, r)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
s = append(s, b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
offset += 1 + l
|
|
||||||
return string(s), offset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Helpers for dealing with escaped bytes
|
// Helpers for dealing with escaped bytes
|
||||||
func isDigit(b byte) bool { return b >= '0' && b <= '9' }
|
func isDigit(b byte) bool { return b >= '0' && b <= '9' }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user