From e8eb8db2ea4c69b2e685f9f0c03d21a8f62b4f2b Mon Sep 17 00:00:00 2001 From: sadq Date: Sun, 16 Nov 2025 20:14:41 +0330 Subject: [PATCH] fix: return error instead of panicking if channel is nil --- clamd.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/clamd.go b/clamd.go index 5199f63..588d0cd 100644 --- a/clamd.go +++ b/clamd.go @@ -91,17 +91,22 @@ func (c *Clamd) simpleCommand(command string) (chan *ScanResult, error) { err = conn.sendCommand(command) if err != nil { + conn.Close() // ← Close connection immediately return nil, err } ch, wg, err := conn.readResponse() + if err != nil { + conn.Close() // ← Close connection immediately + return nil, err + } go func() { wg.Wait() conn.Close() }() - return ch, err + return ch, nil // ← Only return ch when it's valid } /* @@ -110,11 +115,14 @@ Check the daemon's state (should reply with PONG). func (c *Clamd) Ping() error { ch, err := c.simpleCommand("PING") if err != nil { - return err + return err // ← Handle error before reading channel } select { - case s := (<-ch): + case s, ok := <-ch: // ← Check if channel is closed + if !ok { + return errors.New("channel closed unexpectedly") + } switch s.Raw { case "PONG": return nil