此代码可能会泄漏内存中变量的值。
我想也许fmt.XprintY不会重置缓冲区,但我的调试尝试是徒劳的。
package main
import (
"bytes"
"fmt"
"io"
"text/template"
)
type SecWriter struct {
w io.Writer
}
func (s *SecWriter) Write(p []byte) (n int, err error) {
fmt.Println(string(p), len(p), cap(p))
// here
tmp := fmt.Sprintln("info{SSSSSSSSSSSSSSSSSSSSSSSSSSS}")
if tmp == ""{}
s.w.Write(p[:64])
return 64, nil
}
func index() {
exp := "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA{{1}}"
b := &bytes.Buffer{}
s := &SecWriter{
w: b,
}
t := template.Must(template.New("index").Parse(exp))
t.Execute(s, nil)
fmt.Println("buf: ", b.String())
}
func main() {
index()
}
我的go env:
set GOARCH=amd64
set GOOS=windows
去版本
go version go1.12.5 windows/amd64
输出是:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 64 64
1 1 128
buf: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1nfo{SSSSSSSSSSSSSSSSSSSSSSSSSSS} AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
可以看到,内存中变量的部分值:
tmp := fmt.Sprintln("info{SSSSSSSSSSSSSSSSSSSSSSSSSSS}")
泄漏到缓冲区。
繁华开满天机
繁星coding
汪汪一只猫
相关分类