diff options
author | morrita <morrita@chromium.org> | 2014-09-15 20:20:48 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-16 03:21:58 +0000 |
commit | 0a24cfc91484cc092603abf3863690dafe61311e (patch) | |
tree | 90dc1e96404f39cd99f02b5b3390a60a980f94b6 /ipc/mojo/ipc_channel_mojo.cc | |
parent | 57400f1712e531b11d2b08f6f3aa2a11b334c9f6 (diff) | |
download | chromium_src-0a24cfc91484cc092603abf3863690dafe61311e.zip chromium_src-0a24cfc91484cc092603abf3863690dafe61311e.tar.gz chromium_src-0a24cfc91484cc092603abf3863690dafe61311e.tar.bz2 |
ChannelMojo: Handle errors in pending message processing.
ChannelMojo::OnConnect() ignores errors in Send() but the error
results deleting |message_readrer_| which causes null access.
This CL add an error check for that.
This also adds some hooks to make this testable by
faking lower level API.
TEST=ipc_channel_mojo_unittest.cc
BUG=410813
R=yzshen@chromium.org, viettrungluu@chromium.org
Review URL: https://codereview.chromium.org/554363004
Cr-Commit-Position: refs/heads/master@{#294997}
Diffstat (limited to 'ipc/mojo/ipc_channel_mojo.cc')
-rw-r--r-- | ipc/mojo/ipc_channel_mojo.cc | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/ipc/mojo/ipc_channel_mojo.cc b/ipc/mojo/ipc_channel_mojo.cc index 086b420..71c373e 100644 --- a/ipc/mojo/ipc_channel_mojo.cc +++ b/ipc/mojo/ipc_channel_mojo.cc @@ -175,8 +175,13 @@ void ChannelMojo::OnConnected(mojo::ScopedMessagePipeHandle pipe) { make_scoped_ptr(new internal::MessageReader(pipe.Pass(), this)); for (size_t i = 0; i < pending_messages_.size(); ++i) { - message_reader_->Send(make_scoped_ptr(pending_messages_[i])); + bool sent = message_reader_->Send(make_scoped_ptr(pending_messages_[i])); pending_messages_[i] = NULL; + if (!sent) { + pending_messages_.clear(); + listener_->OnChannelError(); + return; + } } pending_messages_.clear(); |