Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Side by Side Diff: content/renderer/pepper_plugin_delegate_impl.cc

Issue 8436008: Add check on invalid file descriptor at both broker and renderer sides. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Synced and resolved conflict. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/pepper_plugin_delegate_impl.h" 5 #include "content/renderer/pepper_plugin_delegate_impl.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <queue> 8 #include <queue>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 : public webkit::ppapi::PluginDelegate::OutOfProcessProxy { 356 : public webkit::ppapi::PluginDelegate::OutOfProcessProxy {
357 public: 357 public:
358 HostDispatcherWrapper() {} 358 HostDispatcherWrapper() {}
359 virtual ~HostDispatcherWrapper() {} 359 virtual ~HostDispatcherWrapper() {}
360 360
361 bool Init(base::ProcessHandle plugin_process_handle, 361 bool Init(base::ProcessHandle plugin_process_handle,
362 const IPC::ChannelHandle& channel_handle, 362 const IPC::ChannelHandle& channel_handle,
363 PP_Module pp_module, 363 PP_Module pp_module,
364 ppapi::proxy::Dispatcher::GetInterfaceFunc local_get_interface, 364 ppapi::proxy::Dispatcher::GetInterfaceFunc local_get_interface,
365 const ppapi::Preferences& preferences) { 365 const ppapi::Preferences& preferences) {
366 if (channel_handle.name.empty())
367 return false;
368
369 #if defined(OS_POSIX)
370 if (channel_handle.socket.fd == -1)
371 return false;
372 #endif
373
366 dispatcher_delegate_.reset(new DispatcherDelegate); 374 dispatcher_delegate_.reset(new DispatcherDelegate);
367 dispatcher_.reset(new ppapi::proxy::HostDispatcher( 375 dispatcher_.reset(new ppapi::proxy::HostDispatcher(
368 plugin_process_handle, pp_module, local_get_interface)); 376 plugin_process_handle, pp_module, local_get_interface));
369 377
370 if (!dispatcher_->InitHostWithChannel( 378 if (!dispatcher_->InitHostWithChannel(dispatcher_delegate_.get(),
371 dispatcher_delegate_.get(), 379 channel_handle,
372 channel_handle, true, preferences)) { 380 true, // Client.
381 preferences)) {
373 dispatcher_.reset(); 382 dispatcher_.reset();
374 dispatcher_delegate_.reset(); 383 dispatcher_delegate_.reset();
375 return false; 384 return false;
376 } 385 }
377 dispatcher_->channel()->SetRestrictDispatchToSameChannel(true); 386 dispatcher_->channel()->SetRestrictDispatchToSameChannel(true);
378 return true; 387 return true;
379 } 388 }
380 389
381 // OutOfProcessProxy implementation. 390 // OutOfProcessProxy implementation.
382 virtual const void* GetProxiedInterface(const char* name) { 391 virtual const void* GetProxiedInterface(const char* name) {
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 482
474 BrokerDispatcherWrapper::BrokerDispatcherWrapper() { 483 BrokerDispatcherWrapper::BrokerDispatcherWrapper() {
475 } 484 }
476 485
477 BrokerDispatcherWrapper::~BrokerDispatcherWrapper() { 486 BrokerDispatcherWrapper::~BrokerDispatcherWrapper() {
478 } 487 }
479 488
480 bool BrokerDispatcherWrapper::Init( 489 bool BrokerDispatcherWrapper::Init(
481 base::ProcessHandle broker_process_handle, 490 base::ProcessHandle broker_process_handle,
482 const IPC::ChannelHandle& channel_handle) { 491 const IPC::ChannelHandle& channel_handle) {
492 if (channel_handle.name.empty())
493 return false;
494
495 #if defined(OS_POSIX)
496 if (channel_handle.socket.fd == -1)
497 return false;
498 #endif
499
483 dispatcher_delegate_.reset(new DispatcherDelegate); 500 dispatcher_delegate_.reset(new DispatcherDelegate);
484 dispatcher_.reset( 501 dispatcher_.reset(
485 new ppapi::proxy::BrokerHostDispatcher(broker_process_handle)); 502 new ppapi::proxy::BrokerHostDispatcher(broker_process_handle));
486 503
487 if (!dispatcher_->InitBrokerWithChannel(dispatcher_delegate_.get(), 504 if (!dispatcher_->InitBrokerWithChannel(dispatcher_delegate_.get(),
488 channel_handle, 505 channel_handle,
489 true)) { 506 true)) { // Client.
490 dispatcher_.reset(); 507 dispatcher_.reset();
491 dispatcher_delegate_.reset(); 508 dispatcher_delegate_.reset();
492 return false; 509 return false;
493 } 510 }
494 dispatcher_->channel()->SetRestrictDispatchToSameChannel(true); 511 dispatcher_->channel()->SetRestrictDispatchToSameChannel(true);
495 return true; 512 return true;
496 } 513 }
497 514
498 // Does not take ownership of the local pipe. 515 // Does not take ownership of the local pipe.
499 int32_t BrokerDispatcherWrapper::SendHandleToBroker( 516 int32_t BrokerDispatcherWrapper::SendHandleToBroker(
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 Release(); 619 Release();
603 } 620 }
604 621
605 void PpapiBrokerImpl::OnBrokerChannelConnected( 622 void PpapiBrokerImpl::OnBrokerChannelConnected(
606 base::ProcessHandle broker_process_handle, 623 base::ProcessHandle broker_process_handle,
607 const IPC::ChannelHandle& channel_handle) { 624 const IPC::ChannelHandle& channel_handle) {
608 scoped_ptr<BrokerDispatcherWrapper> dispatcher(new BrokerDispatcherWrapper); 625 scoped_ptr<BrokerDispatcherWrapper> dispatcher(new BrokerDispatcherWrapper);
609 if (dispatcher->Init(broker_process_handle, channel_handle)) { 626 if (dispatcher->Init(broker_process_handle, channel_handle)) {
610 dispatcher_.reset(dispatcher.release()); 627 dispatcher_.reset(dispatcher.release());
611 628
612 // Process all pending channel requests from the renderers. 629 // Process all pending channel requests from the plugins.
613 for (ClientMap::iterator i = pending_connects_.begin(); 630 for (ClientMap::iterator i = pending_connects_.begin();
614 i != pending_connects_.end(); ++i) { 631 i != pending_connects_.end(); ++i) {
615 base::WeakPtr<webkit::ppapi::PPB_Broker_Impl>& weak_ptr = i->second; 632 base::WeakPtr<webkit::ppapi::PPB_Broker_Impl>& weak_ptr = i->second;
616 if (weak_ptr) 633 if (weak_ptr)
617 ConnectPluginToBroker(weak_ptr); 634 ConnectPluginToBroker(weak_ptr);
618 } 635 }
619 } else { 636 } else {
620 // Report failure to all clients. 637 // Report failure to all clients.
621 for (ClientMap::iterator i = pending_connects_.begin(); 638 for (ClientMap::iterator i = pending_connects_.begin();
622 i != pending_connects_.end(); ++i) { 639 i != pending_connects_.end(); ++i) {
(...skipping 1114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1737 if (!context) 1754 if (!context)
1738 return NULL; 1755 return NULL;
1739 if (!context->makeContextCurrent() || context->isContextLost()) 1756 if (!context->makeContextCurrent() || context->isContextLost())
1740 return NULL; 1757 return NULL;
1741 1758
1742 RendererGLContext* parent_context = context->context(); 1759 RendererGLContext* parent_context = context->context();
1743 if (!parent_context) 1760 if (!parent_context)
1744 return NULL; 1761 return NULL;
1745 return parent_context; 1762 return parent_context;
1746 } 1763 }
OLDNEW
« no previous file with comments | « content/ppapi_plugin/ppapi_thread.cc ('k') | content/renderer/pepper_plugin_delegate_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698