Index: webkit/browser/database/database_util.cc |
diff --git a/webkit/browser/database/database_util.cc b/webkit/browser/database/database_util.cc |
deleted file mode 100644 |
index c6d797a1d50532210719e18230e374765ba0d085..0000000000000000000000000000000000000000 |
--- a/webkit/browser/database/database_util.cc |
+++ /dev/null |
@@ -1,108 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "webkit/browser/database/database_util.h" |
- |
-#include "base/basictypes.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "webkit/browser/database/database_tracker.h" |
-#include "webkit/browser/database/vfs_backend.h" |
-#include "webkit/common/database/database_identifier.h" |
- |
-namespace storage { |
- |
-namespace { |
- |
-bool IsSafeSuffix(const base::string16& suffix) { |
- base::char16 prev_c = 0; |
- for (base::string16::const_iterator it = suffix.begin(); |
- it < suffix.end(); ++it) { |
- base::char16 c = *it; |
- if (!(IsAsciiAlpha(c) || IsAsciiDigit(c) || |
- c == '-' || c == '.' || c == '_')) { |
- return false; |
- } |
- if (c == '.' && prev_c == '.') |
- return false; |
- prev_c = c; |
- } |
- return true; |
-} |
- |
-} |
- |
-const char DatabaseUtil::kJournalFileSuffix[] = "-journal"; |
- |
-bool DatabaseUtil::CrackVfsFileName(const base::string16& vfs_file_name, |
- std::string* origin_identifier, |
- base::string16* database_name, |
- base::string16* sqlite_suffix) { |
- // 'vfs_file_name' is of the form <origin_identifier>/<db_name>#<suffix>. |
- // <suffix> is optional. |
- DCHECK(!vfs_file_name.empty()); |
- size_t first_slash_index = vfs_file_name.find('/'); |
- size_t last_pound_index = vfs_file_name.rfind('#'); |
- // '/' and '#' must be present in the string. Also, the string cannot start |
- // with a '/' (origin_identifier cannot be empty) and '/' must come before '#' |
- if ((first_slash_index == base::string16::npos) || |
- (last_pound_index == base::string16::npos) || |
- (first_slash_index == 0) || |
- (first_slash_index > last_pound_index)) { |
- return false; |
- } |
- |
- std::string origin_id = base::UTF16ToASCII( |
- vfs_file_name.substr(0, first_slash_index)); |
- if (!IsValidOriginIdentifier(origin_id)) |
- return false; |
- |
- base::string16 suffix = vfs_file_name.substr( |
- last_pound_index + 1, vfs_file_name.length() - last_pound_index - 1); |
- if (!IsSafeSuffix(suffix)) |
- return false; |
- |
- if (origin_identifier) |
- *origin_identifier = origin_id; |
- |
- if (database_name) { |
- *database_name = vfs_file_name.substr( |
- first_slash_index + 1, last_pound_index - first_slash_index - 1); |
- } |
- |
- if (sqlite_suffix) |
- *sqlite_suffix = suffix; |
- |
- return true; |
-} |
- |
-base::FilePath DatabaseUtil::GetFullFilePathForVfsFile( |
- DatabaseTracker* db_tracker, const base::string16& vfs_file_name) { |
- std::string origin_identifier; |
- base::string16 database_name; |
- base::string16 sqlite_suffix; |
- if (!CrackVfsFileName(vfs_file_name, &origin_identifier, |
- &database_name, &sqlite_suffix)) { |
- return base::FilePath(); // invalid vfs_file_name |
- } |
- |
- base::FilePath full_path = db_tracker->GetFullDBFilePath( |
- origin_identifier, database_name); |
- if (!full_path.empty() && !sqlite_suffix.empty()) { |
- DCHECK(full_path.Extension().empty()); |
- full_path = full_path.InsertBeforeExtensionASCII( |
- base::UTF16ToASCII(sqlite_suffix)); |
- } |
- // Watch out for directory traversal attempts from a compromised renderer. |
- if (full_path.value().find(FILE_PATH_LITERAL("..")) != |
- base::FilePath::StringType::npos) |
- return base::FilePath(); |
- return full_path; |
-} |
- |
-bool DatabaseUtil::IsValidOriginIdentifier( |
- const std::string& origin_identifier) { |
- return GetOriginFromIdentifier(origin_identifier).is_valid(); |
-} |
- |
-} // namespace storage |