summaryrefslogtreecommitdiff
path: root/chromium/base/platform_file_win.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/base/platform_file_win.cc')
-rw-r--r--chromium/base/platform_file_win.cc14
1 files changed, 14 insertions, 0 deletions
diff --git a/chromium/base/platform_file_win.cc b/chromium/base/platform_file_win.cc
index 07b5c48c22b..b5e07d7665f 100644
--- a/chromium/base/platform_file_win.cc
+++ b/chromium/base/platform_file_win.cc
@@ -86,6 +86,20 @@ PlatformFile CreatePlatformFileUnsafe(const FilePath& name,
HANDLE file = CreateFile(name.value().c_str(), access, sharing, NULL,
disposition, create_flags, NULL);
+ if (INVALID_HANDLE_VALUE != file){
+ // Don't allow directories to be opened without the proper flag (block ADS).
+ if (!(flags & PLATFORM_FILE_BACKUP_SEMANTICS)) {
+ BY_HANDLE_FILE_INFORMATION info = { 0 };
+ BOOL result = GetFileInformationByHandle(file, &info);
+ DCHECK(result);
+ if (info.dwFileAttributes & (FILE_ATTRIBUTE_DIRECTORY |
+ FILE_ATTRIBUTE_REPARSE_POINT)) {
+ CloseHandle(file);
+ file = INVALID_HANDLE_VALUE;
+ }
+ }
+ }
+
if (created && (INVALID_HANDLE_VALUE != file)) {
if (flags & (PLATFORM_FILE_OPEN_ALWAYS))
*created = (ERROR_ALREADY_EXISTS != GetLastError());