File tree Expand file tree Collapse file tree 2 files changed +25
-2
lines changed
Expand file tree Collapse file tree 2 files changed +25
-2
lines changed Original file line number Diff line number Diff line change @@ -910,8 +910,15 @@ func (c *Client) readResponseData(typ string) error {
910910
911911// WaitGreeting waits for the server's initial greeting.
912912func (c * Client ) WaitGreeting () error {
913- <- c .greetingCh
914- return c .greetingErr
913+ select {
914+ case <- c .greetingCh :
915+ return c .greetingErr
916+ case <- c .decCh :
917+ if c .decErr != nil {
918+ return fmt .Errorf ("got error before greeting: %v" , c .decErr )
919+ }
920+ return fmt .Errorf ("connection closed before greeting" )
921+ }
915922}
916923
917924// Noop sends a NOOP command.
Original file line number Diff line number Diff line change @@ -142,3 +142,19 @@ func TestFetch_closeUnreadBody(t *testing.T) {
142142 t .Fatalf ("UIDFetch().Close() = %v" , err )
143143 }
144144}
145+
146+ func TestWaitGreeting_eof (t * testing.T ) {
147+ // bad server: connected but without greeting
148+ clientConn , serverConn := net .Pipe ()
149+
150+ client := imapclient .New (clientConn , nil )
151+ defer client .Close ()
152+
153+ if err := serverConn .Close (); err != nil {
154+ t .Fatalf ("serverConn.Close() = %v" , err )
155+ }
156+
157+ if err := client .WaitGreeting (); err == nil {
158+ t .Fatalf ("WaitGreeting() should fail" )
159+ }
160+ }
You can’t perform that action at this time.
0 commit comments