| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "ppapi/proxy/nacl_message_scanner.h" | 5 #include "ppapi/proxy/nacl_message_scanner.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <tuple> | 9 #include <tuple> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 | 38 |
| 39 // Vector to hold handles found in the message. | 39 // Vector to hold handles found in the message. |
| 40 Handles handles; | 40 Handles handles; |
| 41 // Current handle index in the rewritten message. During the scan, it will be | 41 // Current handle index in the rewritten message. During the scan, it will be |
| 42 // be less than or equal to handles.size(). After the scan it should be equal. | 42 // be less than or equal to handles.size(). After the scan it should be equal. |
| 43 int handle_index; | 43 int handle_index; |
| 44 // The rewritten message. This may be NULL, so all ScanParam overloads should | 44 // The rewritten message. This may be NULL, so all ScanParam overloads should |
| 45 // check for NULL before writing to it. In some cases, a ScanParam overload | 45 // check for NULL before writing to it. In some cases, a ScanParam overload |
| 46 // may set this to NULL when it can determine that there are no parameters | 46 // may set this to NULL when it can determine that there are no parameters |
| 47 // that need conversion. (See the ResourceMessageReplyParams overload.) | 47 // that need conversion. (See the ResourceMessageReplyParams overload.) |
| 48 scoped_ptr<IPC::Message> new_msg; | 48 std::unique_ptr<IPC::Message> new_msg; |
| 49 // Resource id for resource messages. Save this when scanning resource replies | 49 // Resource id for resource messages. Save this when scanning resource replies |
| 50 // so when we audit the nested message, we know which resource it is for. | 50 // so when we audit the nested message, we know which resource it is for. |
| 51 PP_Resource pp_resource; | 51 PP_Resource pp_resource; |
| 52 // Callback to receive the nested message in a resource message or reply. | 52 // Callback to receive the nested message in a resource message or reply. |
| 53 base::Callback<void(PP_Resource, const IPC::Message&, SerializedHandle*)> | 53 base::Callback<void(PP_Resource, const IPC::Message&, SerializedHandle*)> |
| 54 nested_msg_callback; | 54 nested_msg_callback; |
| 55 }; | 55 }; |
| 56 | 56 |
| 57 void WriteHandle(int handle_index, | 57 void WriteHandle(int handle_index, |
| 58 const SerializedHandle& handle, | 58 const SerializedHandle& handle, |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 // message body, rather than passed in a separate FileDescriptorSet. Therefore, | 331 // message body, rather than passed in a separate FileDescriptorSet. Therefore, |
| 332 // on Windows, any message containing handles must be rewritten in the POSIX | 332 // on Windows, any message containing handles must be rewritten in the POSIX |
| 333 // format before we can send it to the NaCl plugin. | 333 // format before we can send it to the NaCl plugin. |
| 334 // On Mac, base::SharedMemoryHandle has a different serialization than | 334 // On Mac, base::SharedMemoryHandle has a different serialization than |
| 335 // base::FileDescriptor (which base::SharedMemoryHandle is typedef-ed to in | 335 // base::FileDescriptor (which base::SharedMemoryHandle is typedef-ed to in |
| 336 // OS_NACL). | 336 // OS_NACL). |
| 337 bool NaClMessageScanner::ScanMessage( | 337 bool NaClMessageScanner::ScanMessage( |
| 338 const IPC::Message& msg, | 338 const IPC::Message& msg, |
| 339 uint32_t type, | 339 uint32_t type, |
| 340 std::vector<SerializedHandle>* handles, | 340 std::vector<SerializedHandle>* handles, |
| 341 scoped_ptr<IPC::Message>* new_msg_ptr) { | 341 std::unique_ptr<IPC::Message>* new_msg_ptr) { |
| 342 DCHECK(handles); | 342 DCHECK(handles); |
| 343 DCHECK(handles->empty()); | 343 DCHECK(handles->empty()); |
| 344 DCHECK(new_msg_ptr); | 344 DCHECK(new_msg_ptr); |
| 345 DCHECK(!new_msg_ptr->get()); | 345 DCHECK(!new_msg_ptr->get()); |
| 346 | 346 |
| 347 bool rewrite_msg = | 347 bool rewrite_msg = |
| 348 #if defined(OS_WIN) || defined(OS_MACOSX) | 348 #if defined(OS_WIN) || defined(OS_MACOSX) |
| 349 true; | 349 true; |
| 350 #else | 350 #else |
| 351 false; | 351 false; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 382 // we ever add new param types that also require rewriting. | 382 // we ever add new param types that also require rewriting. |
| 383 if (!results.handles.empty()) { | 383 if (!results.handles.empty()) { |
| 384 handles->swap(results.handles); | 384 handles->swap(results.handles); |
| 385 *new_msg_ptr = std::move(results.new_msg); | 385 *new_msg_ptr = std::move(results.new_msg); |
| 386 } | 386 } |
| 387 return true; | 387 return true; |
| 388 } | 388 } |
| 389 | 389 |
| 390 void NaClMessageScanner::ScanUntrustedMessage( | 390 void NaClMessageScanner::ScanUntrustedMessage( |
| 391 const IPC::Message& untrusted_msg, | 391 const IPC::Message& untrusted_msg, |
| 392 scoped_ptr<IPC::Message>* new_msg_ptr) { | 392 std::unique_ptr<IPC::Message>* new_msg_ptr) { |
| 393 // Audit FileIO and FileSystem messages to ensure that the plugin doesn't | 393 // Audit FileIO and FileSystem messages to ensure that the plugin doesn't |
| 394 // exceed its file quota. If we find the message is malformed, just pass it | 394 // exceed its file quota. If we find the message is malformed, just pass it |
| 395 // through - we only care about well formed messages to the host. | 395 // through - we only care about well formed messages to the host. |
| 396 if (untrusted_msg.type() == PpapiHostMsg_ResourceCall::ID) { | 396 if (untrusted_msg.type() == PpapiHostMsg_ResourceCall::ID) { |
| 397 ResourceMessageCallParams params; | 397 ResourceMessageCallParams params; |
| 398 IPC::Message nested_msg; | 398 IPC::Message nested_msg; |
| 399 if (!UnpackMessage<PpapiHostMsg_ResourceCall>( | 399 if (!UnpackMessage<PpapiHostMsg_ResourceCall>( |
| 400 untrusted_msg, ¶ms, &nested_msg)) | 400 untrusted_msg, ¶ms, &nested_msg)) |
| 401 return; | 401 return; |
| 402 | 402 |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 559 fio_it->second->SetMaxWrittenOffset(offset_it->second); | 559 fio_it->second->SetMaxWrittenOffset(offset_it->second); |
| 560 } | 560 } |
| 561 } | 561 } |
| 562 break; | 562 break; |
| 563 } | 563 } |
| 564 } | 564 } |
| 565 } | 565 } |
| 566 | 566 |
| 567 } // namespace proxy | 567 } // namespace proxy |
| 568 } // namespace ppapi | 568 } // namespace ppapi |
| OLD | NEW |