Project

General

Profile

Actions

Feature #13379

closed

[PATCH] safe IMAP connections

Added by ahorek (Pavel Rosický) almost 7 years ago. Updated almost 7 years ago.

Status:
Closed
Target version:
-
[ruby-core:80440]

Description

Hi,
I found out that using the standard IMAP library isn't very safe. It can be forced to hang the whole application.

the problem is here

s = @sock.gets(CRLF)

-> the server accepted the connection but it didn't send any data. Now I need to reboot the server because my thread is blocked forever.

I have no other option but to use this

Timeout.timeout(timeout, Net::OpenTimeout) { Net::IMAP.new(host, port, ssl) }

which basically works, but I really don't want to create a new thread for each IMAP call, so I did these changes:
1/ replaced TCPSocket with Socket.tcp
2/ replaced sock.read and sock.gets with sock.read_nonblock

now it works as expected.

Patch
https://github.com/ruby/ruby/pull/1557

related issue, please consider merging this one as well
#12928


Files

imap.patch (3.29 KB) imap.patch ahorek (Pavel Rosický), 03/28/2017 10:34 PM
0002-raise-Net-OpenTimeout.patch (1.27 KB) 0002-raise-Net-OpenTimeout.patch ahorek (Pavel Rosický), 03/29/2017 08:23 PM
0001-ssl_socket_connect-for-imap.patch (1.01 KB) 0001-ssl_socket_connect-for-imap.patch ahorek (Pavel Rosický), 03/29/2017 08:23 PM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0