| 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 | 
|---|