Skip to content

Commit 549050a

Browse files
author
Chris Roche
authored
Merge pull request #38 from lyft/conn-nil
Capture when mongoSocket.conn is nil to prevent panics
2 parents a1c5c99 + 5008222 commit 549050a

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

server.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ package mgo
2828

2929
import (
3030
"errors"
31+
"fmt"
3132
"net"
3233
"sort"
3334
"sync"
@@ -198,6 +199,14 @@ func (server *mongoServer) Connect(timeout time.Duration, socket *mongoSocket) e
198199
logf("Connection to %s failed: %v", server.Addr, err.Error())
199200
return err
200201
}
202+
203+
if conn == nil {
204+
// if a dialer is incorrectly implemented, it may return (nil, nil)
205+
// which will cause a panic downstream
206+
logf("Received nil connection to %s", server.Addr)
207+
return fmt.Errorf("received nil connection to %s", server.Addr)
208+
}
209+
201210
logf("Connection to %s established.", server.Addr)
202211

203212
stats.conn(+1, master)

socket.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,9 @@ func (socket *mongoSocket) kill(err error, abend bool) {
350350

351351
logf("Socket %p to %s: closing: %s (abend=%v)", socket, socket.addr, err.Error(), abend)
352352
socket.dead = err
353-
socket.conn.Close()
353+
if socket.conn != nil {
354+
socket.conn.Close()
355+
}
354356
stats.socketsAlive(-1)
355357
replyFuncs := socket.replyFuncs
356358
socket.replyFuncs = make(map[uint32]replyFunc)

0 commit comments

Comments
 (0)