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 |