| OLD | NEW |
| 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 "chrome/browser/enumerate_modules_model_win.h" | 5 #include "chrome/browser/enumerate_modules_model_win.h" |
| 6 | 6 |
| 7 #include <Tlhelp32.h> | 7 #include <Tlhelp32.h> |
| 8 #include <wintrust.h> | 8 #include <wintrust.h> |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 | 682 |
| 683 void ModuleEnumerator::CollapsePath(Module* entry) { | 683 void ModuleEnumerator::CollapsePath(Module* entry) { |
| 684 // Take the path and see if we can use any of the substitution values | 684 // Take the path and see if we can use any of the substitution values |
| 685 // from the vector constructed above to replace c:\windows with, for | 685 // from the vector constructed above to replace c:\windows with, for |
| 686 // example, %systemroot%. The most collapsed path (the one with the | 686 // example, %systemroot%. The most collapsed path (the one with the |
| 687 // minimum length) wins. | 687 // minimum length) wins. |
| 688 size_t min_length = MAXINT; | 688 size_t min_length = MAXINT; |
| 689 base::string16 location = entry->location; | 689 base::string16 location = entry->location; |
| 690 for (PathMapping::const_iterator mapping = path_mapping_.begin(); | 690 for (PathMapping::const_iterator mapping = path_mapping_.begin(); |
| 691 mapping != path_mapping_.end(); ++mapping) { | 691 mapping != path_mapping_.end(); ++mapping) { |
| 692 base::string16 prefix = mapping->first; | 692 const base::string16& prefix = mapping->first; |
| 693 if (base::StartsWith(location, prefix, false)) { | 693 if (base::StartsWith(base::i18n::ToLower(location), |
| 694 base::i18n::ToLower(prefix), |
| 695 base::CompareCase::SENSITIVE)) { |
| 694 base::string16 new_location = mapping->second + | 696 base::string16 new_location = mapping->second + |
| 695 location.substr(prefix.length() - 1); | 697 location.substr(prefix.length() - 1); |
| 696 size_t length = new_location.length() - mapping->second.length(); | 698 size_t length = new_location.length() - mapping->second.length(); |
| 697 if (length < min_length) { | 699 if (length < min_length) { |
| 698 entry->location = new_location; | 700 entry->location = new_location; |
| 699 min_length = length; | 701 min_length = length; |
| 700 } | 702 } |
| 701 } | 703 } |
| 702 } | 704 } |
| 703 } | 705 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 727 module->recommended_action = kModuleBlacklist[i].help_tip; | 729 module->recommended_action = kModuleBlacklist[i].help_tip; |
| 728 break; | 730 break; |
| 729 } | 731 } |
| 730 } | 732 } |
| 731 | 733 |
| 732 // Modules loaded from these locations are frequently malicious | 734 // Modules loaded from these locations are frequently malicious |
| 733 // and notorious for changing frequently so they are not good candidates | 735 // and notorious for changing frequently so they are not good candidates |
| 734 // for blacklisting individually. Mark them as suspicious if we haven't | 736 // for blacklisting individually. Mark them as suspicious if we haven't |
| 735 // classified them as bad yet. | 737 // classified them as bad yet. |
| 736 if (module->status == NOT_MATCHED || module->status == GOOD) { | 738 if (module->status == NOT_MATCHED || module->status == GOOD) { |
| 737 if (base::StartsWith(module->location, L"%temp%", false) || | 739 if (base::StartsWith(module->location, L"%temp%", |
| 738 base::StartsWith(module->location, L"%tmp%", false)) { | 740 base::CompareCase::INSENSITIVE_ASCII) || |
| 741 base::StartsWith(module->location, L"%tmp%", |
| 742 base::CompareCase::INSENSITIVE_ASCII)) { |
| 739 module->status = SUSPECTED_BAD; | 743 module->status = SUSPECTED_BAD; |
| 740 } | 744 } |
| 741 } | 745 } |
| 742 } | 746 } |
| 743 } | 747 } |
| 744 | 748 |
| 745 void ModuleEnumerator::ReportBack() { | 749 void ModuleEnumerator::ReportBack() { |
| 746 if (!limited_mode_) | 750 if (!limited_mode_) |
| 747 DCHECK(BrowserThread::CurrentlyOn(callback_thread_id_)); | 751 DCHECK(BrowserThread::CurrentlyOn(callback_thread_id_)); |
| 748 observer_->DoneScanning(); | 752 observer_->DoneScanning(); |
| (...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1065 GenerateHash(base::WideToUTF8(module.location), &location); | 1069 GenerateHash(base::WideToUTF8(module.location), &location); |
| 1066 GenerateHash(base::WideToUTF8(module.description), &description); | 1070 GenerateHash(base::WideToUTF8(module.description), &description); |
| 1067 GenerateHash(base::WideToUTF8(module.digital_signer), &signer); | 1071 GenerateHash(base::WideToUTF8(module.digital_signer), &signer); |
| 1068 | 1072 |
| 1069 base::string16 url = | 1073 base::string16 url = |
| 1070 l10n_util::GetStringFUTF16(IDS_HELP_CENTER_VIEW_CONFLICTS, | 1074 l10n_util::GetStringFUTF16(IDS_HELP_CENTER_VIEW_CONFLICTS, |
| 1071 base::ASCIIToUTF16(filename), base::ASCIIToUTF16(location), | 1075 base::ASCIIToUTF16(filename), base::ASCIIToUTF16(location), |
| 1072 base::ASCIIToUTF16(description), base::ASCIIToUTF16(signer)); | 1076 base::ASCIIToUTF16(description), base::ASCIIToUTF16(signer)); |
| 1073 return GURL(base::UTF16ToUTF8(url)); | 1077 return GURL(base::UTF16ToUTF8(url)); |
| 1074 } | 1078 } |
| OLD | NEW |