72f55b857b90af85625defd5f048fbb23bbc4595 — Daniel Martí 11 months ago a82fa2b
lib: fix an out of bounds panic in the server

If the message doesn't contain ':', we don't properly discard the
message, so we end up slicing it like msg[:-1].

This can be reproduced if one runs 'aerc foo', as the server receives
'foo' as the message.

'aerc foo' still doesn't do anything very user friendly, but at least it
doesn't panic horribly.

While at it, do the 'got message' log at the very beginning, so that the
user can see what message the server got before reporting the command as

Signed-off-by: Daniel Martí <mvdan@mvdan.cc>
1 files changed, 2 insertions(+), 1 deletions(-)

M lib/socket.go
M lib/socket.go => lib/socket.go +2 -1
@@ 61,10 61,11 @@ func (as *AercServer) handleClient(conn net.Conn) {
	for scanner.Scan() {
		conn.SetDeadline(time.Now().Add(1 * time.Minute))
		msg := scanner.Text()
		as.logger.Printf("unix:%d: got message %s", clientId, msg)
		if !strings.ContainsRune(msg, ':') {
			conn.Write([]byte("error: invalid command\n"))
		as.logger.Printf("unix:%d: got message %s", clientId, msg)
		prefix := msg[:strings.IndexRune(msg, ':')]
		switch prefix {
		case "mailto":