Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1934)

Unified Diff: base/file_path.cc

Issue 11642041: Don't allow '\0' characters in FilePath. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/file_path.cc
diff --git a/base/file_path.cc b/base/file_path.cc
index 094c699587d36bd83cb509d5b82e7c5383667d04..ec59ff1e5a020dcf1f5dfb326f1a281f71b19872 100644
--- a/base/file_path.cc
+++ b/base/file_path.cc
@@ -40,6 +40,8 @@ const FilePath::CharType FilePath::kParentDirectory[] = FILE_PATH_LITERAL("..");
const FilePath::CharType FilePath::kExtensionSeparator = FILE_PATH_LITERAL('.');
+const FilePath::CharType kStringTerminator = FILE_PATH_LITERAL('\0');
+
Tom Sepez 2012/12/20 21:14:34 Should be in namespace { below.
typedef FilePath::StringType StringType;
namespace {
@@ -182,6 +184,10 @@ FilePath::FilePath(const FilePath& that) : path_(that.path_) {
}
FilePath::FilePath(const StringType& path) : path_(path) {
+ // Don't allow '\0' characters in path.
Tom Sepez 2012/12/20 21:14:34 nit: not sure we need this comment. Maybe just add
+ StringType::size_type zero_pos = path_.find(kStringTerminator);
+ if (zero_pos != StringType::npos)
+ path_.erase(zero_pos);
Tom Sepez 2012/12/20 21:14:34 nit: maybe write path_.erase(zero_pos, StringTy
}
FilePath::~FilePath() {
@@ -454,7 +460,15 @@ bool FilePath::MatchesExtension(const StringType& extension) const {
}
FilePath FilePath::Append(const StringType& component) const {
- DCHECK(!IsPathAbsolute(component));
+ StringType appended(component);
Tom Sepez 2012/12/20 21:14:34 Would be nice to avoid the copy if the NULs not fo
+
+ // Don't allow '\0' characters to be appended.
+ StringType::size_type zero_pos = appended.find(kStringTerminator);
+ if (zero_pos != StringType::npos)
+ appended.erase(zero_pos);
+
+ DCHECK(!IsPathAbsolute(appended));
+
if (path_.compare(kCurrentDirectory) == 0) {
// Append normally doesn't do any normalization, but as a special case,
// when appending to kCurrentDirectory, just return a new path for the
@@ -463,7 +477,7 @@ FilePath FilePath::Append(const StringType& component) const {
// it's likely in practice to wind up with FilePath objects containing
// only kCurrentDirectory when calling DirName on a single relative path
// component.
- return FilePath(component);
+ return FilePath(appended);
}
FilePath new_path(path_);
@@ -472,7 +486,7 @@ FilePath FilePath::Append(const StringType& component) const {
// Don't append a separator if the path is empty (indicating the current
// directory) or if the path component is empty (indicating nothing to
// append).
- if (component.length() > 0 && new_path.path_.length() > 0) {
+ if (appended.length() > 0 && new_path.path_.length() > 0) {
// Don't append a separator if the path still ends with a trailing
// separator after stripping (indicating the root directory).
if (!IsSeparator(new_path.path_[new_path.path_.length() - 1])) {
@@ -483,7 +497,7 @@ FilePath FilePath::Append(const StringType& component) const {
}
}
- new_path.path_.append(component);
+ new_path.path_.append(appended);
return new_path;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698