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