| 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 "base/files/file_path.h" | 5 #include "base/files/file_path.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 FilePath new_path(path_); | 555 FilePath new_path(path_); |
| 556 new_path.StripTrailingSeparatorsInternal(); | 556 new_path.StripTrailingSeparatorsInternal(); |
| 557 | 557 |
| 558 return new_path; | 558 return new_path; |
| 559 } | 559 } |
| 560 | 560 |
| 561 bool FilePath::ReferencesParent() const { | 561 bool FilePath::ReferencesParent() const { |
| 562 std::vector<StringType> components; | 562 std::vector<StringType> components; |
| 563 GetComponents(&components); | 563 GetComponents(&components); |
| 564 | 564 |
| 565 std::vector<StringType>::const_iterator it = components.begin(); | 565 for (const StringType& component : components) { |
| 566 for (; it != components.end(); ++it) { | 566 #if defined(OS_WIN) |
| 567 const StringType& component = *it; | |
| 568 // Windows has odd, undocumented behavior with path components containing | 567 // Windows has odd, undocumented behavior with path components containing |
| 569 // only whitespace and . characters. So, if all we see is . and | 568 // only whitespace and . characters. So, if all we see is . and |
| 570 // whitespace, then we treat any .. sequence as referencing parent. | 569 // whitespace, then we treat any .. sequence as referencing parent. |
| 571 // For simplicity we enforce this on all platforms. | |
| 572 if (component.find_first_not_of(FILE_PATH_LITERAL(". \n\r\t")) == | 570 if (component.find_first_not_of(FILE_PATH_LITERAL(". \n\r\t")) == |
| 573 std::string::npos && | 571 std::string::npos && |
| 574 component.find(kParentDirectory) != std::string::npos) { | 572 component.find(kParentDirectory) != std::string::npos) { |
| 573 // Add a debug-only warning so Windows-specific bot failures are easier to |
| 574 // diagnose. |
| 575 DLOG_IF(WARNING, component != kParentDirectory) |
| 576 << "Rejecting Windows-specific path component."; |
| 575 return true; | 577 return true; |
| 576 } | 578 } |
| 579 #else |
| 580 if (component == kParentDirectory) |
| 581 return true; |
| 582 #endif |
| 577 } | 583 } |
| 578 return false; | 584 return false; |
| 579 } | 585 } |
| 580 | 586 |
| 581 #if defined(OS_POSIX) | 587 #if defined(OS_POSIX) |
| 582 // See file_path.h for a discussion of the encoding of paths on POSIX | 588 // See file_path.h for a discussion of the encoding of paths on POSIX |
| 583 // platforms. These encoding conversion functions are not quite correct. | 589 // platforms. These encoding conversion functions are not quite correct. |
| 584 | 590 |
| 585 string16 FilePath::LossyDisplayName() const { | 591 string16 FilePath::LossyDisplayName() const { |
| 586 return WideToUTF16(SysNativeMBToWide(path_)); | 592 return WideToUTF16(SysNativeMBToWide(path_)); |
| (...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1312 #endif | 1318 #endif |
| 1313 } | 1319 } |
| 1314 | 1320 |
| 1315 #if defined(OS_ANDROID) | 1321 #if defined(OS_ANDROID) |
| 1316 bool FilePath::IsContentUri() const { | 1322 bool FilePath::IsContentUri() const { |
| 1317 return StartsWith(path_, "content://", base::CompareCase::INSENSITIVE_ASCII); | 1323 return StartsWith(path_, "content://", base::CompareCase::INSENSITIVE_ASCII); |
| 1318 } | 1324 } |
| 1319 #endif | 1325 #endif |
| 1320 | 1326 |
| 1321 } // namespace base | 1327 } // namespace base |
| OLD | NEW |