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

Side by Side Diff: sandbox/win/src/sandbox_nt_util.cc

Issue 1485853003: Revert of Remove kuint16max. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@kint2
Patch Set: Created 5 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 unified diff | Download patch
« no previous file with comments | « sandbox/win/src/sandbox_nt_util.h ('k') | no next file » | 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 "sandbox/win/src/sandbox_nt_util.h" 5 #include "sandbox/win/src/sandbox_nt_util.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/win/pe_image.h" 9 #include "base/win/pe_image.h"
10 #include "sandbox/win/src/sandbox_factory.h" 10 #include "sandbox/win/src/sandbox_factory.h"
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 operator delete(handle_name, NT_ALLOC); 283 operator delete(handle_name, NT_ALLOC);
284 handle_name = NULL; 284 handle_name = NULL;
285 } 285 }
286 } 286 }
287 287
288 return ret; 288 return ret;
289 } 289 }
290 290
291 // Hacky code... replace with AllocAndCopyObjectAttributes. 291 // Hacky code... replace with AllocAndCopyObjectAttributes.
292 NTSTATUS AllocAndCopyName(const OBJECT_ATTRIBUTES* in_object, 292 NTSTATUS AllocAndCopyName(const OBJECT_ATTRIBUTES* in_object,
293 wchar_t** out_name, 293 wchar_t** out_name, uint32* attributes,
294 uint32_t* attributes,
295 HANDLE* root) { 294 HANDLE* root) {
296 if (!InitHeap()) 295 if (!InitHeap())
297 return STATUS_NO_MEMORY; 296 return STATUS_NO_MEMORY;
298 297
299 DCHECK_NT(out_name); 298 DCHECK_NT(out_name);
300 *out_name = NULL; 299 *out_name = NULL;
301 NTSTATUS ret = STATUS_UNSUCCESSFUL; 300 NTSTATUS ret = STATUS_UNSUCCESSFUL;
302 __try { 301 __try {
303 do { 302 do {
304 if (in_object->RootDirectory != static_cast<HANDLE>(0) && !root) 303 if (in_object->RootDirectory != static_cast<HANDLE>(0) && !root)
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 alloc_destination); 426 alloc_destination);
428 DCHECK_NT(STATUS_BUFFER_OVERFLOW != ret); 427 DCHECK_NT(STATUS_BUFFER_OVERFLOW != ret);
429 if (!NT_SUCCESS(ret)) { 428 if (!NT_SUCCESS(ret)) {
430 operator delete(out_string, NT_ALLOC); 429 operator delete(out_string, NT_ALLOC);
431 return NULL; 430 return NULL;
432 } 431 }
433 432
434 return out_string; 433 return out_string;
435 } 434 }
436 435
437 UNICODE_STRING* GetImageInfoFromModule(HMODULE module, uint32_t* flags) { 436 UNICODE_STRING* GetImageInfoFromModule(HMODULE module, uint32* flags) {
438 // PEImage's dtor won't be run during SEH unwinding, but that's OK. 437 // PEImage's dtor won't be run during SEH unwinding, but that's OK.
439 #pragma warning(push) 438 #pragma warning(push)
440 #pragma warning(disable: 4509) 439 #pragma warning(disable: 4509)
441 UNICODE_STRING* out_name = NULL; 440 UNICODE_STRING* out_name = NULL;
442 __try { 441 __try {
443 do { 442 do {
444 *flags = 0; 443 *flags = 0;
445 base::win::PEImage pe(module); 444 base::win::PEImage pe(module);
446 445
447 if (!pe.VerifyMagic()) 446 if (!pe.VerifyMagic())
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 // No path separator found. Use the entire name. 522 // No path separator found. Use the entire name.
524 if (!sep) { 523 if (!sep) {
525 sep = &module_path->Buffer[-1]; 524 sep = &module_path->Buffer[-1];
526 } 525 }
527 526
528 // Add one to the size so we can null terminate the string. 527 // Add one to the size so we can null terminate the string.
529 size_t size_bytes = (start_pos - ix + 1) * sizeof(wchar_t); 528 size_t size_bytes = (start_pos - ix + 1) * sizeof(wchar_t);
530 529
531 // Based on the code above, size_bytes should always be small enough 530 // Based on the code above, size_bytes should always be small enough
532 // to make the static_cast below safe. 531 // to make the static_cast below safe.
533 DCHECK_NT(UINT16_MAX > size_bytes); 532 DCHECK_NT(kuint16max > size_bytes);
534 char* str_buffer = new(NT_ALLOC) char[size_bytes + sizeof(UNICODE_STRING)]; 533 char* str_buffer = new(NT_ALLOC) char[size_bytes + sizeof(UNICODE_STRING)];
535 if (!str_buffer) 534 if (!str_buffer)
536 return NULL; 535 return NULL;
537 536
538 UNICODE_STRING* out_string = reinterpret_cast<UNICODE_STRING*>(str_buffer); 537 UNICODE_STRING* out_string = reinterpret_cast<UNICODE_STRING*>(str_buffer);
539 out_string->Buffer = reinterpret_cast<wchar_t*>(&out_string[1]); 538 out_string->Buffer = reinterpret_cast<wchar_t*>(&out_string[1]);
540 out_string->Length = static_cast<USHORT>(size_bytes - sizeof(wchar_t)); 539 out_string->Length = static_cast<USHORT>(size_bytes - sizeof(wchar_t));
541 out_string->MaximumLength = static_cast<USHORT>(size_bytes); 540 out_string->MaximumLength = static_cast<USHORT>(size_bytes);
542 541
543 NTSTATUS ret = CopyData(out_string->Buffer, &sep[1], out_string->Length); 542 NTSTATUS ret = CopyData(out_string->Buffer, &sep[1], out_string->Length);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 DCHECK_NT(NT_SUCCESS(ret)); 578 DCHECK_NT(NT_SUCCESS(ret));
580 579
581 changed_ = false; 580 changed_ = false;
582 address_ = NULL; 581 address_ = NULL;
583 bytes_ = 0; 582 bytes_ = 0;
584 old_protect_ = 0; 583 old_protect_ = 0;
585 584
586 return ret; 585 return ret;
587 } 586 }
588 587
589 bool IsSupportedRenameCall(FILE_RENAME_INFORMATION* file_info, 588 bool IsSupportedRenameCall(FILE_RENAME_INFORMATION* file_info, DWORD length,
590 DWORD length, 589 uint32 file_info_class) {
591 uint32_t file_info_class) {
592 if (FileRenameInformation != file_info_class) 590 if (FileRenameInformation != file_info_class)
593 return false; 591 return false;
594 592
595 if (length < sizeof(FILE_RENAME_INFORMATION)) 593 if (length < sizeof(FILE_RENAME_INFORMATION))
596 return false; 594 return false;
597 595
598 // Make sure file name length doesn't exceed the message length 596 // Make sure file name length doesn't exceed the message length
599 if (length - offsetof(FILE_RENAME_INFORMATION, FileName) < 597 if (length - offsetof(FILE_RENAME_INFORMATION, FileName) <
600 file_info->FileNameLength) 598 file_info->FileNameLength)
601 return false; 599 return false;
602 600
603 // We don't support a root directory. 601 // We don't support a root directory.
604 if (file_info->RootDirectory) 602 if (file_info->RootDirectory)
605 return false; 603 return false;
606 604
607 static const wchar_t kPathPrefix[] = { L'\\', L'?', L'?', L'\\'}; 605 static const wchar_t kPathPrefix[] = { L'\\', L'?', L'?', L'\\'};
608 606
609 // Check if it starts with \\??\\. We don't support relative paths. 607 // Check if it starts with \\??\\. We don't support relative paths.
610 if (file_info->FileNameLength < sizeof(kPathPrefix) || 608 if (file_info->FileNameLength < sizeof(kPathPrefix) ||
611 file_info->FileNameLength > UINT16_MAX) 609 file_info->FileNameLength > kuint16max)
612 return false; 610 return false;
613 611
614 if (file_info->FileName[0] != kPathPrefix[0] || 612 if (file_info->FileName[0] != kPathPrefix[0] ||
615 file_info->FileName[1] != kPathPrefix[1] || 613 file_info->FileName[1] != kPathPrefix[1] ||
616 file_info->FileName[2] != kPathPrefix[2] || 614 file_info->FileName[2] != kPathPrefix[2] ||
617 file_info->FileName[3] != kPathPrefix[3]) 615 file_info->FileName[3] != kPathPrefix[3])
618 return false; 616 return false;
619 617
620 return true; 618 return true;
621 } 619 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 663
666 void* __cdecl operator new(size_t size, 664 void* __cdecl operator new(size_t size,
667 void* buffer, 665 void* buffer,
668 sandbox::AllocationType type) { 666 sandbox::AllocationType type) {
669 return buffer; 667 return buffer;
670 } 668 }
671 669
672 void __cdecl operator delete(void* memory, 670 void __cdecl operator delete(void* memory,
673 void* buffer, 671 void* buffer,
674 sandbox::AllocationType type) {} 672 sandbox::AllocationType type) {}
OLDNEW
« no previous file with comments | « sandbox/win/src/sandbox_nt_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698