diff options
author | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-23 09:51:32 +0000 |
---|---|---|
committer | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-23 09:51:32 +0000 |
commit | 3dd6349c28e563fb69cae8bde54593f079cf19ae (patch) | |
tree | 08fa130effe953e973217a6af668265c1a84ac2f /net/socket_stream | |
parent | 2c95a1afbd9eabf470592d245ccdcb1b6bac9ed5 (diff) | |
download | chromium_src-3dd6349c28e563fb69cae8bde54593f079cf19ae.zip chromium_src-3dd6349c28e563fb69cae8bde54593f079cf19ae.tar.gz chromium_src-3dd6349c28e563fb69cae8bde54593f079cf19ae.tar.bz2 |
Fix Check failure in SocketStream::DidRecevieData().
Socket::Read() may return 0, that indicates end-of-file.
So, if we get 0 as result of Read(), finish the Socket Stream.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/329006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29886 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket_stream')
-rw-r--r-- | net/socket_stream/socket_stream.cc | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/net/socket_stream/socket_stream.cc b/net/socket_stream/socket_stream.cc index a05bf80..3980c52 100644 --- a/net/socket_stream/socket_stream.cc +++ b/net/socket_stream/socket_stream.cc @@ -195,7 +195,7 @@ void SocketStream::DidEstablishConnection() { void SocketStream::DidReceiveData(int result) { DCHECK(read_buf_); - DCHECK(result > 0); + DCHECK_GT(result, 0); if (!delegate_) return; // Notify recevied data to delegate. @@ -233,7 +233,10 @@ void SocketStream::OnIOCompleted(int result) { void SocketStream::OnReadCompleted(int result) { // TODO(ukai): notify error. - if (result >= 0 && read_buf_) { + if (result == 0) { + // 0 indicates end-of-file, so socket was closed. + next_state_ = STATE_NONE; + } else if (result > 0 && read_buf_) { DidReceiveData(result); result = OK; } @@ -468,6 +471,12 @@ int SocketStream::DoReadTunnelHeadersComplete(int result) { if (result < 0) return result; + if (result == 0) { + // 0 indicates end-of-file, so socket was closed. + Finish(); + return result; + } + tunnel_response_headers_len_ += result; DCHECK(tunnel_response_headers_len_ <= tunnel_response_headers_capacity_); @@ -574,6 +583,10 @@ int SocketStream::DoReadWrite(int result) { if (result > 0) { DidReceiveData(result); result = OK; + } else if (result == 0) { + // 0 indicates end-of-file, so socket was closed. + Finish(); + return ERR_CONNECTION_CLOSED; } } if (write_buf_ && !current_write_buf_) { |