summaryrefslogtreecommitdiffstats
path: root/net/socket_stream
diff options
context:
space:
mode:
authorukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-23 09:51:32 +0000
committerukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-23 09:51:32 +0000
commit3dd6349c28e563fb69cae8bde54593f079cf19ae (patch)
tree08fa130effe953e973217a6af668265c1a84ac2f /net/socket_stream
parent2c95a1afbd9eabf470592d245ccdcb1b6bac9ed5 (diff)
downloadchromium_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.cc17
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_) {