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

Side by Side Diff: sandbox/win/tests/validation_tests/commands.cc

Issue 614813002: Cleanup sandbox/ in advance of re-enabling some MSVC warnings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 6 years, 2 months 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 unified diff | Download patch
« no previous file with comments | « sandbox/win/src/target_process.cc ('k') | sandbox/win/tests/validation_tests/suite.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <Aclapi.h> 5 #include <Aclapi.h>
6 #include <windows.h> 6 #include <windows.h>
7 #include <string> 7 #include <string>
8 8
9 #include "sandbox/win/tests/validation_tests/commands.h" 9 #include "sandbox/win/tests/validation_tests/commands.h"
10 10
11 #include "sandbox/win/tests/common/controller.h" 11 #include "sandbox/win/tests/common/controller.h"
12 12
13 namespace { 13 namespace {
14 14
15 // Returns the HKEY corresponding to name. If there is no HKEY corresponding 15 // Returns the HKEY corresponding to name. If there is no HKEY corresponding
16 // to the name it returns NULL. 16 // to the name it returns NULL.
17 HKEY GetHKEYFromString(const base::string16 &name) { 17 HKEY GetHKEYFromString(const base::string16 &name) {
18 if (L"HKLM" == name) 18 if (name == L"HKLM")
19 return HKEY_LOCAL_MACHINE; 19 return HKEY_LOCAL_MACHINE;
20 else if (L"HKCR" == name) 20 if (name == L"HKCR")
21 return HKEY_CLASSES_ROOT; 21 return HKEY_CLASSES_ROOT;
22 else if (L"HKCC" == name) 22 if (name == L"HKCC")
23 return HKEY_CURRENT_CONFIG; 23 return HKEY_CURRENT_CONFIG;
24 else if (L"HKCU" == name) 24 if (name == L"HKCU")
25 return HKEY_CURRENT_USER; 25 return HKEY_CURRENT_USER;
26 else if (L"HKU" == name) 26 if (name == L"HKU")
27 return HKEY_USERS; 27 return HKEY_USERS;
28 28
29 return NULL; 29 return NULL;
30 } 30 }
31 31
32 // Modifies string to remove the leading and trailing quotes. 32 // Modifies string to remove the leading and trailing quotes.
33 void trim_quote(base::string16* string) { 33 void trim_quote(base::string16* string) {
34 base::string16::size_type pos1 = string->find_first_not_of(L'"'); 34 base::string16::size_type pos1 = string->find_first_not_of(L'"');
35 base::string16::size_type pos2 = string->find_last_not_of(L'"'); 35 base::string16::size_type pos2 = string->find_last_not_of(L'"');
36 36
37 if (base::string16::npos == pos1 || base::string16::npos == pos2) 37 if (pos1 == base::string16::npos || pos2 == base::string16::npos)
38 (*string) = L""; 38 string->clear();
39 else 39 else
40 (*string) = string->substr(pos1, pos2 + 1); 40 (*string) = string->substr(pos1, pos2 + 1);
41 } 41 }
42 42
43 int TestOpenFile(base::string16 path, bool for_write) { 43 int TestOpenFile(base::string16 path, bool for_write) {
44 wchar_t path_expanded[MAX_PATH + 1] = {0}; 44 wchar_t path_expanded[MAX_PATH + 1] = {0};
45 DWORD size = ::ExpandEnvironmentStrings(path.c_str(), path_expanded, 45 DWORD size = ::ExpandEnvironmentStrings(path.c_str(), path_expanded,
46 MAX_PATH); 46 MAX_PATH);
47 if (!size) 47 if (!size)
48 return sandbox::SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; 48 return sandbox::SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
49 49
50 HANDLE file; 50 HANDLE file;
51 file = ::CreateFile(path_expanded, 51 file = ::CreateFile(path_expanded,
52 for_write ? GENERIC_READ | GENERIC_WRITE : GENERIC_READ, 52 for_write ? GENERIC_READ | GENERIC_WRITE : GENERIC_READ,
53 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 53 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
54 NULL, // No security attributes. 54 NULL, // No security attributes.
55 OPEN_EXISTING, 55 OPEN_EXISTING,
56 FILE_FLAG_BACKUP_SEMANTICS, 56 FILE_FLAG_BACKUP_SEMANTICS,
57 NULL); // No template. 57 NULL); // No template.
58 58
59 if (INVALID_HANDLE_VALUE != file) { 59 if (file != INVALID_HANDLE_VALUE) {
60 ::CloseHandle(file); 60 ::CloseHandle(file);
61 return sandbox::SBOX_TEST_SUCCEEDED; 61 return sandbox::SBOX_TEST_SUCCEEDED;
62 } else {
63 if (ERROR_ACCESS_DENIED == ::GetLastError()) {
64 return sandbox::SBOX_TEST_DENIED;
65 } else {
66 return sandbox::SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
67 }
68 } 62 }
63 return (::GetLastError() == ERROR_ACCESS_DENIED) ?
64 sandbox::SBOX_TEST_DENIED : sandbox::SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
69 } 65 }
70 66
71 } // namespace 67 } // namespace
72 68
73 namespace sandbox { 69 namespace sandbox {
74 70
75 SBOX_TESTS_COMMAND int ValidWindow(int argc, wchar_t **argv) { 71 SBOX_TESTS_COMMAND int ValidWindow(int argc, wchar_t **argv) {
76 if (1 != argc) 72 return (argc == 1) ?
77 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; 73 TestValidWindow(
78 74 reinterpret_cast<HWND>(static_cast<ULONG_PTR>(_wtoi(argv[0])))) :
79 HWND window = reinterpret_cast<HWND>(static_cast<ULONG_PTR>(_wtoi(argv[0]))); 75 SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
80
81 return TestValidWindow(window);
82 } 76 }
83 77
84 int TestValidWindow(HWND window) { 78 int TestValidWindow(HWND window) {
85 if (::IsWindow(window)) 79 return ::IsWindow(window) ? SBOX_TEST_SUCCEEDED : SBOX_TEST_DENIED;
86 return SBOX_TEST_SUCCEEDED;
87
88 return SBOX_TEST_DENIED;
89 } 80 }
90 81
91 SBOX_TESTS_COMMAND int OpenProcessCmd(int argc, wchar_t **argv) { 82 SBOX_TESTS_COMMAND int OpenProcessCmd(int argc, wchar_t **argv) {
92 if (2 != argc) 83 return (argc == 2) ?
93 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; 84 TestOpenProcess(_wtol(argv[0]), _wtol(argv[1])) :
94 85 SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
95 DWORD process_id = _wtol(argv[0]);
96 DWORD access_mask = _wtol(argv[1]);
97 return TestOpenProcess(process_id, access_mask);
98 } 86 }
99 87
100 int TestOpenProcess(DWORD process_id, DWORD access_mask) { 88 int TestOpenProcess(DWORD process_id, DWORD access_mask) {
101 HANDLE process = ::OpenProcess(access_mask, 89 HANDLE process = ::OpenProcess(access_mask,
102 FALSE, // Do not inherit handle. 90 FALSE, // Do not inherit handle.
103 process_id); 91 process_id);
104 if (NULL == process) { 92 if (process != NULL) {
105 if (ERROR_ACCESS_DENIED == ::GetLastError()) {
106 return SBOX_TEST_DENIED;
107 } else {
108 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
109 }
110 } else {
111 ::CloseHandle(process); 93 ::CloseHandle(process);
112 return SBOX_TEST_SUCCEEDED; 94 return SBOX_TEST_SUCCEEDED;
113 } 95 }
96 return (::GetLastError() == ERROR_ACCESS_DENIED) ?
97 sandbox::SBOX_TEST_DENIED : sandbox::SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
114 } 98 }
115 99
116 SBOX_TESTS_COMMAND int OpenThreadCmd(int argc, wchar_t **argv) { 100 SBOX_TESTS_COMMAND int OpenThreadCmd(int argc, wchar_t **argv) {
117 if (1 != argc) 101 return (argc == 1) ?
118 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; 102 TestOpenThread(_wtoi(argv[0])) : SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
119
120 DWORD thread_id = _wtoi(argv[0]);
121 return TestOpenThread(thread_id);
122 } 103 }
123 104
124 int TestOpenThread(DWORD thread_id) { 105 int TestOpenThread(DWORD thread_id) {
125
126 HANDLE thread = ::OpenThread(THREAD_QUERY_INFORMATION, 106 HANDLE thread = ::OpenThread(THREAD_QUERY_INFORMATION,
127 FALSE, // Do not inherit handles. 107 FALSE, // Do not inherit handles.
128 thread_id); 108 thread_id);
129 109 if (thread != NULL) {
130 if (NULL == thread) {
131 if (ERROR_ACCESS_DENIED == ::GetLastError()) {
132 return SBOX_TEST_DENIED;
133 } else {
134 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
135 }
136 } else {
137 ::CloseHandle(thread); 110 ::CloseHandle(thread);
138 return SBOX_TEST_SUCCEEDED; 111 return SBOX_TEST_SUCCEEDED;
139 } 112 }
113 return (::GetLastError() == ERROR_ACCESS_DENIED) ?
114 sandbox::SBOX_TEST_DENIED : sandbox::SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
140 } 115 }
141 116
142 SBOX_TESTS_COMMAND int OpenFileCmd(int argc, wchar_t **argv) { 117 SBOX_TESTS_COMMAND int OpenFileCmd(int argc, wchar_t **argv) {
143 if (1 != argc) 118 if (1 != argc)
144 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; 119 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
145 120
146 base::string16 path = argv[0]; 121 base::string16 path = argv[0];
147 trim_quote(&path); 122 trim_quote(&path);
148 123
149 return TestOpenReadFile(path); 124 return TestOpenReadFile(path);
150 } 125 }
151 126
152 int TestOpenReadFile(const base::string16& path) { 127 int TestOpenReadFile(const base::string16& path) {
153 return TestOpenFile(path, false); 128 return TestOpenFile(path, false);
154 } 129 }
155 130
156 int TestOpenWriteFile(int argc, wchar_t **argv) { 131 int TestOpenWriteFile(int argc, wchar_t **argv) {
157 if (1 != argc) 132 if (argc != 1)
158 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; 133 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
159 134
160 base::string16 path = argv[0]; 135 base::string16 path = argv[0];
161 trim_quote(&path); 136 trim_quote(&path);
162
163 return TestOpenWriteFile(path); 137 return TestOpenWriteFile(path);
164 } 138 }
165 139
166 int TestOpenWriteFile(const base::string16& path) { 140 int TestOpenWriteFile(const base::string16& path) {
167 return TestOpenFile(path, true); 141 return TestOpenFile(path, true);
168 } 142 }
169 143
170 SBOX_TESTS_COMMAND int OpenKey(int argc, wchar_t **argv) { 144 SBOX_TESTS_COMMAND int OpenKey(int argc, wchar_t **argv) {
171 if (0 == argc || argc > 2) 145 if (argc != 1 && argc != 2)
172 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; 146 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
173 147
174 // Get the hive. 148 // Get the hive.
175 HKEY base_key = GetHKEYFromString(argv[0]); 149 HKEY base_key = GetHKEYFromString(argv[0]);
176 150
177 // Get the subkey. 151 // Get the subkey.
178 base::string16 subkey; 152 base::string16 subkey;
179 if (2 == argc) { 153 if (argc == 2) {
180 subkey = argv[1]; 154 subkey = argv[1];
181 trim_quote(&subkey); 155 trim_quote(&subkey);
182 } 156 }
183 157
184 return TestOpenKey(base_key, subkey); 158 return TestOpenKey(base_key, subkey);
185 } 159 }
186 160
187 int TestOpenKey(HKEY base_key, base::string16 subkey) { 161 int TestOpenKey(HKEY base_key, base::string16 subkey) {
188 HKEY key; 162 HKEY key;
189 LONG err_code = ::RegOpenKeyEx(base_key, 163 LONG err_code = ::RegOpenKeyEx(base_key,
190 subkey.c_str(), 164 subkey.c_str(),
191 0, // Reserved, must be 0. 165 0, // Reserved, must be 0.
192 MAXIMUM_ALLOWED, 166 MAXIMUM_ALLOWED,
193 &key); 167 &key);
194 if (ERROR_SUCCESS == err_code) { 168 if (err_code == ERROR_SUCCESS) {
195 ::RegCloseKey(key); 169 ::RegCloseKey(key);
196 return SBOX_TEST_SUCCEEDED; 170 return SBOX_TEST_SUCCEEDED;
197 } else if (ERROR_INVALID_HANDLE == err_code ||
198 ERROR_ACCESS_DENIED == err_code) {
199 return SBOX_TEST_DENIED;
200 } else {
201 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
202 } 171 }
172 return (err_code == ERROR_INVALID_HANDLE || err_code == ERROR_ACCESS_DENIED) ?
173 SBOX_TEST_DENIED : SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
203 } 174 }
204 175
205 // Returns true if the current's thread desktop is the interactive desktop. 176 // Returns true if the current's thread desktop is the interactive desktop.
206 // In Vista there is a more direct test but for XP and w2k we need to check 177 // In Vista there is a more direct test but for XP and w2k we need to check
207 // the object name. 178 // the object name.
208 bool IsInteractiveDesktop(bool* is_interactive) { 179 bool IsInteractiveDesktop(bool* is_interactive) {
209 HDESK current_desk = ::GetThreadDesktop(::GetCurrentThreadId()); 180 HDESK current_desk = ::GetThreadDesktop(::GetCurrentThreadId());
210 if (NULL == current_desk) { 181 if (current_desk == NULL)
211 return false; 182 return false;
212 }
213 wchar_t current_desk_name[256] = {0}; 183 wchar_t current_desk_name[256] = {0};
214 if (!::GetUserObjectInformationW(current_desk, UOI_NAME, current_desk_name, 184 if (!::GetUserObjectInformationW(current_desk, UOI_NAME, current_desk_name,
215 sizeof(current_desk_name), NULL)) { 185 sizeof(current_desk_name), NULL))
216 return false; 186 return false;
217 }
218 *is_interactive = (0 == _wcsicmp(L"default", current_desk_name)); 187 *is_interactive = (0 == _wcsicmp(L"default", current_desk_name));
219 return true; 188 return true;
220 } 189 }
221 190
222 SBOX_TESTS_COMMAND int OpenInteractiveDesktop(int, wchar_t **) { 191 SBOX_TESTS_COMMAND int OpenInteractiveDesktop(int, wchar_t **) {
223 return TestOpenInputDesktop(); 192 return TestOpenInputDesktop();
224 } 193 }
225 194
226 int TestOpenInputDesktop() { 195 int TestOpenInputDesktop() {
227 bool is_interactive = false; 196 bool is_interactive = false;
228 if (IsInteractiveDesktop(&is_interactive) && is_interactive) { 197 if (IsInteractiveDesktop(&is_interactive) && is_interactive)
229 return SBOX_TEST_SUCCEEDED; 198 return SBOX_TEST_SUCCEEDED;
230 }
231 HDESK desk = ::OpenInputDesktop(0, FALSE, DESKTOP_CREATEWINDOW); 199 HDESK desk = ::OpenInputDesktop(0, FALSE, DESKTOP_CREATEWINDOW);
232 if (desk) { 200 if (desk) {
233 ::CloseDesktop(desk); 201 ::CloseDesktop(desk);
234 return SBOX_TEST_SUCCEEDED; 202 return SBOX_TEST_SUCCEEDED;
235 } 203 }
236 return SBOX_TEST_DENIED; 204 return SBOX_TEST_DENIED;
237 } 205 }
238 206
239 SBOX_TESTS_COMMAND int SwitchToSboxDesktop(int, wchar_t **) { 207 SBOX_TESTS_COMMAND int SwitchToSboxDesktop(int, wchar_t **) {
240 return TestSwitchDesktop(); 208 return TestSwitchDesktop();
241 } 209 }
242 210
243 int TestSwitchDesktop() { 211 int TestSwitchDesktop() {
244 HDESK desktop = ::GetThreadDesktop(::GetCurrentThreadId()); 212 HDESK desktop = ::GetThreadDesktop(::GetCurrentThreadId());
245 if (NULL == desktop) { 213 if (desktop == NULL)
246 return SBOX_TEST_FAILED; 214 return SBOX_TEST_FAILED;
247 } 215 return ::SwitchDesktop(desktop) ? SBOX_TEST_SUCCEEDED : SBOX_TEST_DENIED;
248 if (::SwitchDesktop(desktop)) {
249 return SBOX_TEST_SUCCEEDED;
250 }
251 return SBOX_TEST_DENIED;
252 } 216 }
253 217
254 SBOX_TESTS_COMMAND int OpenAlternateDesktop(int, wchar_t **argv) { 218 SBOX_TESTS_COMMAND int OpenAlternateDesktop(int, wchar_t **argv) {
255 return TestOpenAlternateDesktop(argv[0]); 219 return TestOpenAlternateDesktop(argv[0]);
256 } 220 }
257 221
258 int TestOpenAlternateDesktop(wchar_t *desktop_name) { 222 int TestOpenAlternateDesktop(wchar_t *desktop_name) {
259 // Test for WRITE_DAC permission on the handle. 223 // Test for WRITE_DAC permission on the handle.
260 HDESK desktop = ::GetThreadDesktop(::GetCurrentThreadId()); 224 HDESK desktop = ::GetThreadDesktop(::GetCurrentThreadId());
261 if (desktop) { 225 if (desktop) {
262 HANDLE test_handle; 226 HANDLE test_handle;
263 if (::DuplicateHandle(::GetCurrentProcess(), desktop, 227 if (::DuplicateHandle(::GetCurrentProcess(), desktop,
264 ::GetCurrentProcess(), &test_handle, 228 ::GetCurrentProcess(), &test_handle,
265 WRITE_DAC, FALSE, 0)) { 229 WRITE_DAC, FALSE, 0)) {
266 DWORD result = ::SetSecurityInfo(test_handle, SE_WINDOW_OBJECT, 230 DWORD result = ::SetSecurityInfo(test_handle, SE_WINDOW_OBJECT,
267 DACL_SECURITY_INFORMATION, NULL, NULL, 231 DACL_SECURITY_INFORMATION, NULL, NULL,
268 NULL, NULL); 232 NULL, NULL);
269 ::CloseHandle(test_handle); 233 ::CloseHandle(test_handle);
270 if (result == ERROR_SUCCESS) { 234 if (result == ERROR_SUCCESS)
271 return SBOX_TEST_SUCCEEDED; 235 return SBOX_TEST_SUCCEEDED;
272 }
273 } else if (::GetLastError() != ERROR_ACCESS_DENIED) { 236 } else if (::GetLastError() != ERROR_ACCESS_DENIED) {
274 return SBOX_TEST_FAILED; 237 return SBOX_TEST_FAILED;
275 } 238 }
276 } 239 }
277 240
278 // Open by name with WRITE_DAC. 241 // Open by name with WRITE_DAC.
279 desktop = ::OpenDesktop(desktop_name, 0, FALSE, WRITE_DAC); 242 desktop = ::OpenDesktop(desktop_name, 0, FALSE, WRITE_DAC);
280 if (desktop || ::GetLastError() != ERROR_ACCESS_DENIED) { 243 if (!desktop && ::GetLastError() == ERROR_ACCESS_DENIED)
281 ::CloseDesktop(desktop); 244 return SBOX_TEST_DENIED;
282 return SBOX_TEST_SUCCEEDED; 245 ::CloseDesktop(desktop);
283 } 246 return SBOX_TEST_SUCCEEDED;
284
285 return SBOX_TEST_DENIED;
286 } 247 }
287 248
288 BOOL CALLBACK DesktopTestEnumProc(LPTSTR desktop_name, LPARAM result) { 249 BOOL CALLBACK DesktopTestEnumProc(LPTSTR desktop_name, LPARAM result) {
289 return TRUE; 250 return TRUE;
290 } 251 }
291 252
292 SBOX_TESTS_COMMAND int EnumAlternateWinsta(int, wchar_t **) { 253 SBOX_TESTS_COMMAND int EnumAlternateWinsta(int, wchar_t **) {
293 return TestEnumAlternateWinsta(); 254 return TestEnumAlternateWinsta();
294 } 255 }
295 256
296 int TestEnumAlternateWinsta() { 257 int TestEnumAlternateWinsta() {
297 int result = SBOX_TEST_DENIED;
298 // Try to enumerate the destops on the alternate windowstation. 258 // Try to enumerate the destops on the alternate windowstation.
299 if (::EnumDesktopsW(NULL, DesktopTestEnumProc, 0)) { 259 return ::EnumDesktopsW(NULL, DesktopTestEnumProc, 0) ?
300 return SBOX_TEST_SUCCEEDED; 260 SBOX_TEST_SUCCEEDED : SBOX_TEST_DENIED;
301 }
302 return SBOX_TEST_DENIED;
303 } 261 }
304 262
305 SBOX_TESTS_COMMAND int SleepCmd(int argc, wchar_t **argv) { 263 SBOX_TESTS_COMMAND int SleepCmd(int argc, wchar_t **argv) {
306 if (1 != argc) 264 if (argc != 1)
307 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; 265 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
308 266
309 ::Sleep(_wtoi(argv[0])); 267 ::Sleep(_wtoi(argv[0]));
310 return SBOX_TEST_SUCCEEDED; 268 return SBOX_TEST_SUCCEEDED;
311 } 269 }
312 270
313 SBOX_TESTS_COMMAND int AllocateCmd(int argc, wchar_t **argv) { 271 SBOX_TESTS_COMMAND int AllocateCmd(int argc, wchar_t **argv) {
314 if (argc != 1) 272 if (argc != 1)
315 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; 273 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
316 274
317 size_t mem_size = static_cast<size_t>(_wtoll(argv[0])); 275 size_t mem_size = static_cast<size_t>(_wtoll(argv[0]));
318 void* memory = ::VirtualAlloc(NULL, mem_size, MEM_COMMIT | MEM_RESERVE, 276 void* memory = ::VirtualAlloc(NULL, mem_size, MEM_COMMIT | MEM_RESERVE,
319 PAGE_READWRITE); 277 PAGE_READWRITE);
320 if (!memory) { 278 if (!memory) {
321 // We need to give the broker a chance to kill our process on failure. 279 // We need to give the broker a chance to kill our process on failure.
322 ::Sleep(5000); 280 ::Sleep(5000);
323 return SBOX_TEST_DENIED; 281 return SBOX_TEST_DENIED;
324 } 282 }
325 283
326 if (!::VirtualFree(memory, 0, MEM_RELEASE)) 284 return ::VirtualFree(memory, 0, MEM_RELEASE) ?
327 return SBOX_TEST_FAILED; 285 SBOX_TEST_SUCCEEDED : SBOX_TEST_FAILED;
328
329 return SBOX_TEST_SUCCEEDED;
330 } 286 }
331 287
332 288
333 } // namespace sandbox 289 } // namespace sandbox
OLDNEW
« no previous file with comments | « sandbox/win/src/target_process.cc ('k') | sandbox/win/tests/validation_tests/suite.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698