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

Side by Side Diff: base/memory/shared_memory_unittest.cc

Issue 203123009: Disallow calling Map on currently-mapped SharedMemory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months 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 | Annotate | Revision Log
« no previous file with comments | « base/memory/shared_memory_posix.cc ('k') | base/memory/shared_memory_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "base/memory/shared_memory.h" 7 #include "base/memory/shared_memory.h"
8 #include "base/process/kill.h" 8 #include "base/process/kill.h"
9 #include "base/rand_util.h" 9 #include "base/rand_util.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 contents.size())); 470 contents.size()));
471 } 471 }
472 472
473 TEST(SharedMemoryTest, MapAt) { 473 TEST(SharedMemoryTest, MapAt) {
474 ASSERT_TRUE(SysInfo::VMAllocationGranularity() >= sizeof(uint32)); 474 ASSERT_TRUE(SysInfo::VMAllocationGranularity() >= sizeof(uint32));
475 const size_t kCount = SysInfo::VMAllocationGranularity(); 475 const size_t kCount = SysInfo::VMAllocationGranularity();
476 const size_t kDataSize = kCount * sizeof(uint32); 476 const size_t kDataSize = kCount * sizeof(uint32);
477 477
478 SharedMemory memory; 478 SharedMemory memory;
479 ASSERT_TRUE(memory.CreateAndMapAnonymous(kDataSize)); 479 ASSERT_TRUE(memory.CreateAndMapAnonymous(kDataSize));
480 ASSERT_TRUE(memory.Map(kDataSize));
481 uint32* ptr = static_cast<uint32*>(memory.memory()); 480 uint32* ptr = static_cast<uint32*>(memory.memory());
482 ASSERT_NE(ptr, static_cast<void*>(NULL)); 481 ASSERT_NE(ptr, static_cast<void*>(NULL));
483 482
484 for (size_t i = 0; i < kCount; ++i) { 483 for (size_t i = 0; i < kCount; ++i) {
485 ptr[i] = i; 484 ptr[i] = i;
486 } 485 }
487 486
488 memory.Unmap(); 487 memory.Unmap();
489 488
490 off_t offset = SysInfo::VMAllocationGranularity(); 489 off_t offset = SysInfo::VMAllocationGranularity();
491 ASSERT_TRUE(memory.MapAt(offset, kDataSize - offset)); 490 ASSERT_TRUE(memory.MapAt(offset, kDataSize - offset));
492 offset /= sizeof(uint32); 491 offset /= sizeof(uint32);
493 ptr = static_cast<uint32*>(memory.memory()); 492 ptr = static_cast<uint32*>(memory.memory());
494 ASSERT_NE(ptr, static_cast<void*>(NULL)); 493 ASSERT_NE(ptr, static_cast<void*>(NULL));
495 for (size_t i = offset; i < kCount; ++i) { 494 for (size_t i = offset; i < kCount; ++i) {
496 EXPECT_EQ(ptr[i - offset], i); 495 EXPECT_EQ(ptr[i - offset], i);
497 } 496 }
498 } 497 }
499 498
499 TEST(SharedMemoryTest, MapTwice) {
500 const uint32 kDataSize = 1024;
501 SharedMemory memory;
502 bool rv = memory.CreateAndMapAnonymous(kDataSize);
503 EXPECT_TRUE(rv);
504
505 void* old_address = memory.memory();
506
507 rv = memory.Map(kDataSize);
508 EXPECT_FALSE(rv);
509 EXPECT_EQ(old_address, memory.memory());
510 }
511
500 #if defined(OS_POSIX) 512 #if defined(OS_POSIX)
501 // Create a shared memory object, mmap it, and mprotect it to PROT_EXEC. 513 // Create a shared memory object, mmap it, and mprotect it to PROT_EXEC.
502 TEST(SharedMemoryTest, AnonymousExecutable) { 514 TEST(SharedMemoryTest, AnonymousExecutable) {
503 const uint32 kTestSize = 1 << 16; 515 const uint32 kTestSize = 1 << 16;
504 516
505 SharedMemory shared_memory; 517 SharedMemory shared_memory;
506 SharedMemoryCreateOptions options; 518 SharedMemoryCreateOptions options;
507 options.size = kTestSize; 519 options.size = kTestSize;
508 options.executable = true; 520 options.executable = true;
509 521
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 SharedMemoryProcessTest::CleanUp(); 673 SharedMemoryProcessTest::CleanUp();
662 } 674 }
663 675
664 MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain) { 676 MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain) {
665 return SharedMemoryProcessTest::TaskTestMain(); 677 return SharedMemoryProcessTest::TaskTestMain();
666 } 678 }
667 679
668 #endif // !OS_IOS 680 #endif // !OS_IOS
669 681
670 } // namespace base 682 } // namespace base
OLDNEW
« no previous file with comments | « base/memory/shared_memory_posix.cc ('k') | base/memory/shared_memory_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698