summaryrefslogtreecommitdiffstats
path: root/ipc/mojo/ipc_channel_mojo.cc
diff options
context:
space:
mode:
authormorrita <morrita@chromium.org>2014-09-15 20:20:48 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-16 03:21:58 +0000
commit0a24cfc91484cc092603abf3863690dafe61311e (patch)
tree90dc1e96404f39cd99f02b5b3390a60a980f94b6 /ipc/mojo/ipc_channel_mojo.cc
parent57400f1712e531b11d2b08f6f3aa2a11b334c9f6 (diff)
downloadchromium_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.cc7
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();