#121: Remove defer from for loops

Fixes #121. `defer` in for loops can possibly lead to leaks.

The whole handling including the defer are now moved into anonymous functions outside the for loop and are called form the loop instead. This way the defer is handle when the inline function finishes
This commit is contained in:
Winni Neessen 2023-03-15 18:42:25 +01:00
parent cb9bec4a6f
commit 13d0add21c
Signed by: wneessen
GPG key ID: 5F3AF39B820C119D

View file

@ -808,13 +808,7 @@ func TestHello(t *testing.T) {
t.Fatalf("Hello server and client size mismatch")
}
for i := 0; i < len(helloServer); i++ {
server := strings.Join(strings.Split(baseHelloServer+helloServer[i], "\n"), "\r\n")
client := strings.Join(strings.Split(baseHelloClient+helloClient[i], "\n"), "\r\n")
var cmdbuf strings.Builder
bcmdbuf := bufio.NewWriter(&cmdbuf)
var fake faker
fake.ReadWriter = bufio.NewReadWriter(bufio.NewReader(strings.NewReader(server)), bcmdbuf)
tf := func(fake faker, i int) error {
c, err := NewClient(fake, "fake.host")
if err != nil {
t.Fatalf("NewClient: %v", err)
@ -871,6 +865,20 @@ func TestHello(t *testing.T) {
if err != nil {
t.Errorf("Command %d failed: %v", i, err)
}
return nil
}
for i := 0; i < len(helloServer); i++ {
server := strings.Join(strings.Split(baseHelloServer+helloServer[i], "\n"), "\r\n")
client := strings.Join(strings.Split(baseHelloClient+helloClient[i], "\n"), "\r\n")
var cmdbuf strings.Builder
bcmdbuf := bufio.NewWriter(&cmdbuf)
var fake faker
fake.ReadWriter = bufio.NewReadWriter(bufio.NewReader(strings.NewReader(server)), bcmdbuf)
if err := tf(fake, i); err != nil {
t.Error(err)
}
if err := bcmdbuf.Flush(); err != nil {
t.Errorf("flush failed: %s", err)
@ -1241,6 +1249,13 @@ func serverHandle(c net.Conn, t *testing.T) error {
send := smtpSender{c}.send
send("220 127.0.0.1 ESMTP service ready")
s := bufio.NewScanner(c)
tf := func(config *tls.Config) error {
c = tls.Server(c, config)
defer func() {
_ = c.Close()
}()
return serverHandleTLS(c, t)
}
for s.Scan() {
switch s.Text() {
case "EHLO localhost":
@ -1254,11 +1269,7 @@ func serverHandle(c net.Conn, t *testing.T) error {
return err
}
config := &tls.Config{Certificates: []tls.Certificate{keypair}}
c = tls.Server(c, config)
defer func() {
_ = c.Close()
}()
return serverHandleTLS(c, t)
return tf(config)
default:
t.Fatalf("unrecognized command: %q", s.Text())
}