Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / sandbox / win / src / filesystem_interception.cc
index 33688f0..179cad5 100644 (file)
@@ -35,6 +35,7 @@ NTSTATUS WINAPI TargetNtCreateFile(NtCreateFileFunction orig_CreateFile,
   if (!SandboxFactory::GetTargetServices()->GetState()->InitCalled())
     return status;
 
+  wchar_t* name = NULL;
   do {
     if (!ValidParameter(file, sizeof(HANDLE), WRITE))
       break;
@@ -45,18 +46,19 @@ NTSTATUS WINAPI TargetNtCreateFile(NtCreateFileFunction orig_CreateFile,
     if (NULL == memory)
       break;
 
-    wchar_t* name;
     uint32 attributes = 0;
     NTSTATUS ret = AllocAndCopyName(object_attributes, &name, &attributes,
                                     NULL);
     if (!NT_SUCCESS(ret) || NULL == name)
       break;
 
-    ULONG broker = FALSE;
+    uint32 desired_access_uint32 = desired_access;
+    uint32 options_uint32 = options;
+    uint32 broker = FALSE;
     CountedParameterSet<OpenFile> params;
     params[OpenFile::NAME] = ParamPickerMake(name);
-    params[OpenFile::ACCESS] = ParamPickerMake(desired_access);
-    params[OpenFile::OPTIONS] = ParamPickerMake(options);
+    params[OpenFile::ACCESS] = ParamPickerMake(desired_access_uint32);
+    params[OpenFile::OPTIONS] = ParamPickerMake(options_uint32);
     params[OpenFile::BROKER] = ParamPickerMake(broker);
 
     if (!QueryBroker(IPC_NTCREATEFILE_TAG, params.GetBase()))
@@ -67,11 +69,8 @@ NTSTATUS WINAPI TargetNtCreateFile(NtCreateFileFunction orig_CreateFile,
     // The following call must match in the parameters with
     // FilesystemDispatcher::ProcessNtCreateFile.
     ResultCode code = CrossCall(ipc, IPC_NTCREATEFILE_TAG, name, attributes,
-                                desired_access, file_attributes, sharing,
-                                disposition, options, &answer);
-
-    operator delete(name, NT_ALLOC);
-
+                                desired_access_uint32, file_attributes, sharing,
+                                disposition, options_uint32, &answer);
     if (SBOX_ALL_OK != code)
       break;
 
@@ -88,6 +87,9 @@ NTSTATUS WINAPI TargetNtCreateFile(NtCreateFileFunction orig_CreateFile,
     }
   } while (false);
 
+  if (name)
+    operator delete(name, NT_ALLOC);
+
   return status;
 }
 
@@ -106,6 +108,7 @@ NTSTATUS WINAPI TargetNtOpenFile(NtOpenFileFunction orig_OpenFile, PHANDLE file,
   if (!SandboxFactory::GetTargetServices()->GetState()->InitCalled())
     return status;
 
+  wchar_t* name = NULL;
   do {
     if (!ValidParameter(file, sizeof(HANDLE), WRITE))
       break;
@@ -116,18 +119,19 @@ NTSTATUS WINAPI TargetNtOpenFile(NtOpenFileFunction orig_OpenFile, PHANDLE file,
     if (NULL == memory)
       break;
 
-    wchar_t* name;
     uint32 attributes;
     NTSTATUS ret = AllocAndCopyName(object_attributes, &name, &attributes,
                                     NULL);
     if (!NT_SUCCESS(ret) || NULL == name)
       break;
 
-    ULONG broker = FALSE;
+    uint32 desired_access_uint32 = desired_access;
+    uint32 options_uint32 = options;
+    uint32 broker = FALSE;
     CountedParameterSet<OpenFile> params;
     params[OpenFile::NAME] = ParamPickerMake(name);
-    params[OpenFile::ACCESS] = ParamPickerMake(desired_access);
-    params[OpenFile::OPTIONS] = ParamPickerMake(options);
+    params[OpenFile::ACCESS] = ParamPickerMake(desired_access_uint32);
+    params[OpenFile::OPTIONS] = ParamPickerMake(options_uint32);
     params[OpenFile::BROKER] = ParamPickerMake(broker);
 
     if (!QueryBroker(IPC_NTOPENFILE_TAG, params.GetBase()))
@@ -136,10 +140,8 @@ NTSTATUS WINAPI TargetNtOpenFile(NtOpenFileFunction orig_OpenFile, PHANDLE file,
     SharedMemIPCClient ipc(memory);
     CrossCallReturn answer = {0};
     ResultCode code = CrossCall(ipc, IPC_NTOPENFILE_TAG, name, attributes,
-                                desired_access, sharing, options, &answer);
-
-    operator delete(name, NT_ALLOC);
-
+                                desired_access_uint32, sharing, options_uint32,
+                                &answer);
     if (SBOX_ALL_OK != code)
       break;
 
@@ -156,6 +158,9 @@ NTSTATUS WINAPI TargetNtOpenFile(NtOpenFileFunction orig_OpenFile, PHANDLE file,
     }
   } while (false);
 
+  if (name)
+    operator delete(name, NT_ALLOC);
+
   return status;
 }
 
@@ -172,6 +177,7 @@ NTSTATUS WINAPI TargetNtQueryAttributesFile(
   if (!SandboxFactory::GetTargetServices()->GetState()->InitCalled())
     return status;
 
+  wchar_t* name = NULL;
   do {
     if (!ValidParameter(file_attributes, sizeof(FILE_BASIC_INFORMATION), WRITE))
       break;
@@ -180,7 +186,6 @@ NTSTATUS WINAPI TargetNtQueryAttributesFile(
     if (NULL == memory)
       break;
 
-    wchar_t* name = NULL;
     uint32 attributes = 0;
     NTSTATUS ret = AllocAndCopyName(object_attributes, &name, &attributes,
                                     NULL);
@@ -190,7 +195,7 @@ NTSTATUS WINAPI TargetNtQueryAttributesFile(
     InOutCountedBuffer file_info(file_attributes,
                                  sizeof(FILE_BASIC_INFORMATION));
 
-    ULONG broker = FALSE;
+    uint32 broker = FALSE;
     CountedParameterSet<FileName> params;
     params[FileName::NAME] = ParamPickerMake(name);
     params[FileName::BROKER] = ParamPickerMake(broker);
@@ -212,6 +217,9 @@ NTSTATUS WINAPI TargetNtQueryAttributesFile(
 
   } while (false);
 
+  if (name)
+    operator delete(name, NT_ALLOC);
+
   return status;
 }
 
@@ -229,6 +237,7 @@ NTSTATUS WINAPI TargetNtQueryFullAttributesFile(
   if (!SandboxFactory::GetTargetServices()->GetState()->InitCalled())
     return status;
 
+  wchar_t* name = NULL;
   do {
     if (!ValidParameter(file_attributes, sizeof(FILE_NETWORK_OPEN_INFORMATION),
                         WRITE))
@@ -238,7 +247,6 @@ NTSTATUS WINAPI TargetNtQueryFullAttributesFile(
     if (NULL == memory)
       break;
 
-    wchar_t* name = NULL;
     uint32 attributes = 0;
     NTSTATUS ret = AllocAndCopyName(object_attributes, &name, &attributes,
                                     NULL);
@@ -248,7 +256,7 @@ NTSTATUS WINAPI TargetNtQueryFullAttributesFile(
     InOutCountedBuffer file_info(file_attributes,
                                  sizeof(FILE_NETWORK_OPEN_INFORMATION));
 
-    ULONG broker = FALSE;
+    uint32 broker = FALSE;
     CountedParameterSet<FileName> params;
     params[FileName::NAME] = ParamPickerMake(name);
     params[FileName::BROKER] = ParamPickerMake(broker);
@@ -269,6 +277,9 @@ NTSTATUS WINAPI TargetNtQueryFullAttributesFile(
     return answer.nt_status;
   } while (false);
 
+  if (name)
+    operator delete(name, NT_ALLOC);
+
   return status;
 }
 
@@ -286,6 +297,7 @@ NTSTATUS WINAPI TargetNtSetInformationFile(
   if (!SandboxFactory::GetTargetServices()->GetState()->InitCalled())
     return status;
 
+  wchar_t* name = NULL;
   do {
     void* memory = GetGlobalIPCMemory();
     if (NULL == memory)
@@ -315,12 +327,11 @@ NTSTATUS WINAPI TargetNtSetInformationFile(
       break;
     }
 
-    wchar_t* name;
     NTSTATUS ret = AllocAndCopyName(&object_attributes, &name, NULL, NULL);
     if (!NT_SUCCESS(ret) || !name)
       break;
 
-    ULONG broker = FALSE;
+    uint32 broker = FALSE;
     CountedParameterSet<FileName> params;
     params[FileName::NAME] = ParamPickerMake(name);
     params[FileName::BROKER] = ParamPickerMake(broker);
@@ -345,6 +356,9 @@ NTSTATUS WINAPI TargetNtSetInformationFile(
     status = answer.nt_status;
   } while (false);
 
+  if (name)
+    operator delete(name, NT_ALLOC);
+
   return status;
 }