Subject: [libssh2] libssh2-0.17 infinite recv() loop at startup

[libssh2] libssh2-0.17 infinite recv() loop at startup

From: Sullivan, David J. <djms_at_bear.com>
Date: Wed, 8 Aug 2007 06:54:11 -0400

In src/session.c, libssh2_session_startup() sets the session socket to
blocking mode, calls libssh2_banner_send() then calls
libssh2_banner_receive().

If the connection is dropped by the client between those two calls,
libssh2_banner_receive() hard loops doing recv()'s that are returning 0.

The culprit seems to be the "if (ret <= 0) continue;" code. Placing the
continue in the loop above (which is "if (ret < 0 )") and adding code to
check for zero seems to do the trick:

            } else {
                /* Some kinda error */
                session->banner_TxRx_state = libssh2_NB_state_idle;
                session->banner_TxRx_total_send = 0;
                return 1;
            }
            continue;
        }

        if (ret == 0) {
            /* EOF */
            session->banner_TxRx_state = libssh2_NB_state_idle;
            session->banner_TxRx_total_send = 0;
            return 1;
        }

David

***********************************************************************
Bear Stearns is not responsible for any recommendation, solicitation,
offer or agreement or any information about any transaction, customer
account or account activity contained in this communication.
***********************************************************************

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
libssh2-devel mailing list
libssh2-devel_at_lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libssh2-devel
Received on 2007-08-08