diff options
author | dmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-12 22:27:06 +0000 |
---|---|---|
committer | dmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-12 22:27:06 +0000 |
commit | 73e20db4130833c5122b3d982a77b82a83928164 (patch) | |
tree | 2f5990981a3dd5ea362d86bc1f16804adfb44ef2 /ppapi | |
parent | 620446f7e0fd70a61b19c6c4060656574e251357 (diff) | |
download | chromium_src-73e20db4130833c5122b3d982a77b82a83928164.zip chromium_src-73e20db4130833c5122b3d982a77b82a83928164.tar.gz chromium_src-73e20db4130833c5122b3d982a77b82a83928164.tar.bz2 |
PPAPI: Check permissions for VarDeprecated and PPP_Class
BUG=159690
Review URL: https://codereview.chromium.org/11504003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172672 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r-- | ppapi/proxy/ppapi_proxy_test.cc | 4 | ||||
-rw-r--r-- | ppapi/proxy/ppb_var_deprecated_proxy.cc | 3 | ||||
-rw-r--r-- | ppapi/proxy/ppp_class_proxy.cc | 29 | ||||
-rw-r--r-- | ppapi/proxy/ppp_instance_private_proxy.cc | 3 |
4 files changed, 36 insertions, 3 deletions
diff --git a/ppapi/proxy/ppapi_proxy_test.cc b/ppapi/proxy/ppapi_proxy_test.cc index 117a80c..5f38908 100644 --- a/ppapi/proxy/ppapi_proxy_test.cc +++ b/ppapi/proxy/ppapi_proxy_test.cc @@ -316,7 +316,7 @@ void HostProxyTestHarness::SetUpHarness() { pp_module(), &MockGetInterface, status_receiver_.release(), - PpapiPermissions())); + PpapiPermissions::AllPermissions())); host_dispatcher_->InitWithTestSink(&sink()); HostDispatcher::SetForInstance(pp_instance(), host_dispatcher_.get()); } @@ -336,7 +336,7 @@ void HostProxyTestHarness::SetUpHarnessWithChannel( pp_module(), &MockGetInterface, status_receiver_.release(), - PpapiPermissions())); + PpapiPermissions::AllPermissions())); ppapi::Preferences preferences; host_dispatcher_->InitHostWithChannel(&delegate_mock_, channel_handle, is_client, preferences); diff --git a/ppapi/proxy/ppb_var_deprecated_proxy.cc b/ppapi/proxy/ppb_var_deprecated_proxy.cc index 3cef43a..2513a85 100644 --- a/ppapi/proxy/ppb_var_deprecated_proxy.cc +++ b/ppapi/proxy/ppb_var_deprecated_proxy.cc @@ -326,6 +326,9 @@ const InterfaceProxy::Info* PPB_Var_Deprecated_Proxy::GetInfo() { } bool PPB_Var_Deprecated_Proxy::OnMessageReceived(const IPC::Message& msg) { + if (!dispatcher()->permissions().HasPermission(PERMISSION_DEV)) + return false; + // Prevent the dispatcher from going away during a call to Call or other // function that could mutate the DOM. This must happen OUTSIDE of // the message handlers since the SerializedVars use the dispatcher upon diff --git a/ppapi/proxy/ppp_class_proxy.cc b/ppapi/proxy/ppp_class_proxy.cc index 8d44a90..5e9a1da8 100644 --- a/ppapi/proxy/ppp_class_proxy.cc +++ b/ppapi/proxy/ppp_class_proxy.cc @@ -36,11 +36,19 @@ struct ObjectProxy { }; ObjectProxy* ToObjectProxy(void* data) { - return reinterpret_cast<ObjectProxy*>(data); + ObjectProxy* obj = reinterpret_cast<ObjectProxy*>(data); + if (!obj || !obj->dispatcher) + return NULL; + if (!obj->dispatcher->permissions().HasPermission(PERMISSION_DEV)) + return NULL; + return obj; } bool HasProperty(void* object, PP_Var name, PP_Var* exception) { ObjectProxy* obj = ToObjectProxy(object); + if (!obj) + return false; + bool result = false; ReceiveSerializedException se(obj->dispatcher, exception); obj->dispatcher->Send(new PpapiMsg_PPPClass_HasProperty( @@ -51,6 +59,9 @@ bool HasProperty(void* object, PP_Var name, PP_Var* exception) { bool HasMethod(void* object, PP_Var name, PP_Var* exception) { ObjectProxy* obj = ToObjectProxy(object); + if (!obj) + return false; + bool result = false; ReceiveSerializedException se(obj->dispatcher, exception); obj->dispatcher->Send(new PpapiMsg_PPPClass_HasMethod( @@ -63,6 +74,9 @@ PP_Var GetProperty(void* object, PP_Var name, PP_Var* exception) { ObjectProxy* obj = ToObjectProxy(object); + if (!obj) + return PP_MakeUndefined(); + ReceiveSerializedException se(obj->dispatcher, exception); ReceiveSerializedVarReturnValue result; obj->dispatcher->Send(new PpapiMsg_PPPClass_GetProperty( @@ -84,6 +98,9 @@ void SetProperty(void* object, PP_Var value, PP_Var* exception) { ObjectProxy* obj = ToObjectProxy(object); + if (!obj) + return; + ReceiveSerializedException se(obj->dispatcher, exception); obj->dispatcher->Send(new PpapiMsg_PPPClass_SetProperty( API_ID_PPP_CLASS, obj->ppp_class, obj->user_data, @@ -95,6 +112,9 @@ void RemoveProperty(void* object, PP_Var name, PP_Var* exception) { ObjectProxy* obj = ToObjectProxy(object); + if (!obj) + return; + ReceiveSerializedException se(obj->dispatcher, exception); obj->dispatcher->Send(new PpapiMsg_PPPClass_RemoveProperty( API_ID_PPP_CLASS, obj->ppp_class, obj->user_data, @@ -107,6 +127,8 @@ PP_Var Call(void* object, PP_Var* argv, PP_Var* exception) { ObjectProxy* obj = ToObjectProxy(object); + if (!obj) + return PP_MakeUndefined(); ReceiveSerializedVarReturnValue result; ReceiveSerializedException se(obj->dispatcher, exception); @@ -126,6 +148,8 @@ PP_Var Construct(void* object, PP_Var* argv, PP_Var* exception) { ObjectProxy* obj = ToObjectProxy(object); + if (!obj) + return PP_MakeUndefined(); ReceiveSerializedVarReturnValue result; ReceiveSerializedException se(obj->dispatcher, exception); @@ -141,6 +165,9 @@ PP_Var Construct(void* object, void Deallocate(void* object) { ObjectProxy* obj = ToObjectProxy(object); + if (!obj) + return; + obj->dispatcher->Send(new PpapiMsg_PPPClass_Deallocate( API_ID_PPP_CLASS, obj->ppp_class, obj->user_data)); delete obj; diff --git a/ppapi/proxy/ppp_instance_private_proxy.cc b/ppapi/proxy/ppp_instance_private_proxy.cc index 678d30b..0a0ac99 100644 --- a/ppapi/proxy/ppp_instance_private_proxy.cc +++ b/ppapi/proxy/ppp_instance_private_proxy.cc @@ -21,6 +21,9 @@ namespace { PP_Var GetInstanceObject(PP_Instance instance) { Dispatcher* dispatcher = HostDispatcher::GetForInstance(instance); + if (!dispatcher->permissions().HasPermission(PERMISSION_PRIVATE)) + return PP_MakeUndefined(); + ReceiveSerializedVarReturnValue result; dispatcher->Send(new PpapiMsg_PPPInstancePrivate_GetInstanceObject( API_ID_PPP_INSTANCE_PRIVATE, instance, &result)); |