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

Unified Diff: ipc/ipc_message_utils.cc

Issue 2555483002: Add POSIX shared memory support for Mac (Closed)
Patch Set: Check that we never pass POSIX shm over Mojo. Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: ipc/ipc_message_utils.cc
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc
index be83e5a236bb2322e66b36d13aa0640759cdc691..d96266f6f27edb8299f856e411cb5e41730d5283 100644
--- a/ipc/ipc_message_utils.cc
+++ b/ipc/ipc_message_utils.cc
@@ -690,22 +690,43 @@ void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* sizer,
void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
const param_type& p) {
- MachPortMac mach_port_mac(p.GetMemoryObject());
- ParamTraits<MachPortMac>::Write(m, mach_port_mac);
- size_t size = 0;
- bool result = p.GetSize(&size);
- DCHECK(result);
- ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size));
+ m->WriteInt(p.GetType());
- // If the caller intended to pass ownership to the IPC stack, release a
- // reference.
- if (p.OwnershipPassesToIPC())
- p.Close();
+ switch (p.GetType()) {
+ case base::SharedMemoryHandle::POSIX:
+ // We should never pass POSIX shared memory over IPC.
+ CHECK(false);
+ break;
+ case base::SharedMemoryHandle::MACH:
+ MachPortMac mach_port_mac(p.GetMemoryObject());
+ ParamTraits<MachPortMac>::Write(m, mach_port_mac);
+ size_t size = 0;
+ bool result = p.GetSize(&size);
+ DCHECK(result);
+ ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size));
+
+ // If the caller intended to pass ownership to the IPC stack, release a
+ // reference.
+ if (p.OwnershipPassesToIPC())
+ p.Close();
+
+ break;
+ }
}
bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
base::PickleIterator* iter,
param_type* r) {
+ base::SharedMemoryHandle::TypeWireFormat type;
+ if (!iter->ReadInt(&type))
+ return false;
+
+ if (type == base::SharedMemoryHandle::POSIX) {
+ // We should never pass POSIX shared memory over IPC.
+ CHECK(false);
+ return false;
+ }
+
MachPortMac mach_port_mac;
if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac))
return false;
@@ -722,8 +743,16 @@ bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p,
std::string* l) {
- l->append("Mach port: ");
- LogParam(p.GetMemoryObject(), l);
+ switch (p.GetType()) {
+ case base::SharedMemoryHandle::POSIX:
+ // We should never pass POSIX shared memory over IPC.
+ CHECK(false);
+ break;
+ case base::SharedMemoryHandle::MACH:
+ l->append("Mach port: ");
+ LogParam(p.GetMemoryObject(), l);
+ break;
+ }
}
#elif defined(OS_WIN)

Powered by Google App Engine
This is Rietveld 408576698