| OLD | NEW |
| 1 // Copyright 2015 The Crashpad Authors. All rights reserved. | 1 // Copyright 2015 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "build/build_config.h" | 26 #include "build/build_config.h" |
| 27 #include "gtest/gtest.h" | 27 #include "gtest/gtest.h" |
| 28 #include "test/errors.h" | 28 #include "test/errors.h" |
| 29 #include "test/scoped_temp_dir.h" | 29 #include "test/scoped_temp_dir.h" |
| 30 #include "test/paths.h" | 30 #include "test/paths.h" |
| 31 #include "test/win/child_launcher.h" | 31 #include "test/win/child_launcher.h" |
| 32 #include "util/file/file_io.h" | 32 #include "util/file/file_io.h" |
| 33 #include "util/misc/uuid.h" | 33 #include "util/misc/uuid.h" |
| 34 #include "util/win/command_line.h" | 34 #include "util/win/command_line.h" |
| 35 #include "util/win/get_function.h" | 35 #include "util/win/get_function.h" |
| 36 #include "util/win/handle.h" |
| 36 #include "util/win/scoped_handle.h" | 37 #include "util/win/scoped_handle.h" |
| 37 | 38 |
| 38 namespace crashpad { | 39 namespace crashpad { |
| 39 namespace test { | 40 namespace test { |
| 40 namespace { | 41 namespace { |
| 41 | 42 |
| 42 const wchar_t kNtdllName[] = L"\\ntdll.dll"; | 43 const wchar_t kNtdllName[] = L"\\ntdll.dll"; |
| 43 | 44 |
| 44 bool IsProcessWow64(HANDLE process_handle) { | 45 bool IsProcessWow64(HANDLE process_handle) { |
| 45 static const auto is_wow64_process = | 46 static const auto is_wow64_process = |
| (...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 mapping_name.c_str())); | 567 mapping_name.c_str())); |
| 567 ASSERT_TRUE(mapping.is_valid()) << ErrorMessage("CreateFileMapping"); | 568 ASSERT_TRUE(mapping.is_valid()) << ErrorMessage("CreateFileMapping"); |
| 568 | 569 |
| 569 ProcessInfo info; | 570 ProcessInfo info; |
| 570 info.Initialize(GetCurrentProcess()); | 571 info.Initialize(GetCurrentProcess()); |
| 571 bool found_file_handle = false; | 572 bool found_file_handle = false; |
| 572 bool found_inherited_file_handle = false; | 573 bool found_inherited_file_handle = false; |
| 573 bool found_key_handle = false; | 574 bool found_key_handle = false; |
| 574 bool found_mapping_handle = false; | 575 bool found_mapping_handle = false; |
| 575 for (auto handle : info.Handles()) { | 576 for (auto handle : info.Handles()) { |
| 576 if (reinterpret_cast<uint32_t>(file.get()) == handle.handle) { | 577 const int handle_int = implicit_cast<int>(handle.handle); |
| 578 if (handle_int == HandleToInt(file.get())) { |
| 577 EXPECT_FALSE(found_file_handle); | 579 EXPECT_FALSE(found_file_handle); |
| 578 found_file_handle = true; | 580 found_file_handle = true; |
| 579 EXPECT_EQ(L"File", handle.type_name); | 581 EXPECT_EQ(L"File", handle.type_name); |
| 580 EXPECT_EQ(1, handle.handle_count); | 582 EXPECT_EQ(1, handle.handle_count); |
| 581 EXPECT_NE(0u, handle.pointer_count); | 583 EXPECT_NE(0u, handle.pointer_count); |
| 582 EXPECT_EQ(STANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE | SYNCHRONIZE, | 584 EXPECT_EQ(STANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE | SYNCHRONIZE, |
| 583 handle.granted_access & STANDARD_RIGHTS_ALL); | 585 handle.granted_access & STANDARD_RIGHTS_ALL); |
| 584 EXPECT_EQ(0, handle.attributes); | 586 EXPECT_EQ(0, handle.attributes); |
| 585 } | 587 } |
| 586 if (reinterpret_cast<uint32_t>(inherited_file.get()) == handle.handle) { | 588 if (handle_int == HandleToInt(inherited_file.get())) { |
| 587 EXPECT_FALSE(found_inherited_file_handle); | 589 EXPECT_FALSE(found_inherited_file_handle); |
| 588 found_inherited_file_handle = true; | 590 found_inherited_file_handle = true; |
| 589 EXPECT_EQ(L"File", handle.type_name); | 591 EXPECT_EQ(L"File", handle.type_name); |
| 590 EXPECT_EQ(1, handle.handle_count); | 592 EXPECT_EQ(1, handle.handle_count); |
| 591 EXPECT_NE(0u, handle.pointer_count); | 593 EXPECT_NE(0u, handle.pointer_count); |
| 592 EXPECT_EQ(STANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE | SYNCHRONIZE, | 594 EXPECT_EQ(STANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE | SYNCHRONIZE, |
| 593 handle.granted_access & STANDARD_RIGHTS_ALL); | 595 handle.granted_access & STANDARD_RIGHTS_ALL); |
| 594 | 596 |
| 595 // OBJ_INHERIT from ntdef.h, but including that conflicts with other | 597 // OBJ_INHERIT from ntdef.h, but including that conflicts with other |
| 596 // headers. | 598 // headers. |
| 597 const int kObjInherit = 0x2; | 599 const int kObjInherit = 0x2; |
| 598 EXPECT_EQ(kObjInherit, handle.attributes); | 600 EXPECT_EQ(kObjInherit, handle.attributes); |
| 599 } | 601 } |
| 600 if (reinterpret_cast<uint32_t>(scoped_key.get()) == handle.handle) { | 602 if (handle_int == HandleToInt(scoped_key.get())) { |
| 601 EXPECT_FALSE(found_key_handle); | 603 EXPECT_FALSE(found_key_handle); |
| 602 found_key_handle = true; | 604 found_key_handle = true; |
| 603 EXPECT_EQ(L"Key", handle.type_name); | 605 EXPECT_EQ(L"Key", handle.type_name); |
| 604 EXPECT_EQ(1, handle.handle_count); | 606 EXPECT_EQ(1, handle.handle_count); |
| 605 EXPECT_NE(0u, handle.pointer_count); | 607 EXPECT_NE(0u, handle.pointer_count); |
| 606 EXPECT_EQ(STANDARD_RIGHTS_READ, | 608 EXPECT_EQ(STANDARD_RIGHTS_READ, |
| 607 handle.granted_access & STANDARD_RIGHTS_ALL); | 609 handle.granted_access & STANDARD_RIGHTS_ALL); |
| 608 EXPECT_EQ(0, handle.attributes); | 610 EXPECT_EQ(0, handle.attributes); |
| 609 } | 611 } |
| 610 if (reinterpret_cast<uint32_t>(mapping.get()) == handle.handle) { | 612 if (handle_int == HandleToInt(mapping.get())) { |
| 611 EXPECT_FALSE(found_mapping_handle); | 613 EXPECT_FALSE(found_mapping_handle); |
| 612 found_mapping_handle = true; | 614 found_mapping_handle = true; |
| 613 EXPECT_EQ(L"Section", handle.type_name); | 615 EXPECT_EQ(L"Section", handle.type_name); |
| 614 EXPECT_EQ(1, handle.handle_count); | 616 EXPECT_EQ(1, handle.handle_count); |
| 615 EXPECT_NE(0u, handle.pointer_count); | 617 EXPECT_NE(0u, handle.pointer_count); |
| 616 EXPECT_EQ(DELETE | READ_CONTROL | WRITE_DAC | WRITE_OWNER | | 618 EXPECT_EQ(DELETE | READ_CONTROL | WRITE_DAC | WRITE_OWNER | |
| 617 STANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE, | 619 STANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE, |
| 618 handle.granted_access & STANDARD_RIGHTS_ALL); | 620 handle.granted_access & STANDARD_RIGHTS_ALL); |
| 619 EXPECT_EQ(0, handle.attributes); | 621 EXPECT_EQ(0, handle.attributes); |
| 620 } | 622 } |
| 621 } | 623 } |
| 622 EXPECT_TRUE(found_file_handle); | 624 EXPECT_TRUE(found_file_handle); |
| 625 EXPECT_TRUE(found_inherited_file_handle); |
| 623 EXPECT_TRUE(found_key_handle); | 626 EXPECT_TRUE(found_key_handle); |
| 624 EXPECT_TRUE(found_mapping_handle); | 627 EXPECT_TRUE(found_mapping_handle); |
| 625 } | 628 } |
| 626 | 629 |
| 627 TEST(ProcessInfo, OutOfRangeCheck) { | 630 TEST(ProcessInfo, OutOfRangeCheck) { |
| 628 const size_t kAllocationSize = 12345; | 631 const size_t kAllocationSize = 12345; |
| 629 scoped_ptr<char[]> safe_memory(new char[kAllocationSize]); | 632 scoped_ptr<char[]> safe_memory(new char[kAllocationSize]); |
| 630 | 633 |
| 631 ProcessInfo info; | 634 ProcessInfo info; |
| 632 info.Initialize(GetCurrentProcess()); | 635 info.Initialize(GetCurrentProcess()); |
| 633 | 636 |
| 634 EXPECT_TRUE( | 637 EXPECT_TRUE( |
| 635 info.LoggingRangeIsFullyReadable(CheckedRange<WinVMAddress, WinVMSize>( | 638 info.LoggingRangeIsFullyReadable(CheckedRange<WinVMAddress, WinVMSize>( |
| 636 reinterpret_cast<WinVMAddress>(safe_memory.get()), kAllocationSize))); | 639 reinterpret_cast<WinVMAddress>(safe_memory.get()), kAllocationSize))); |
| 637 EXPECT_FALSE(info.LoggingRangeIsFullyReadable( | 640 EXPECT_FALSE(info.LoggingRangeIsFullyReadable( |
| 638 CheckedRange<WinVMAddress, WinVMSize>(0, 1024))); | 641 CheckedRange<WinVMAddress, WinVMSize>(0, 1024))); |
| 639 } | 642 } |
| 640 | 643 |
| 641 } // namespace | 644 } // namespace |
| 642 } // namespace test | 645 } // namespace test |
| 643 } // namespace crashpad | 646 } // namespace crashpad |
| OLD | NEW |