Index: base/win/pe_image.cc |
diff --git a/base/win/pe_image.cc b/base/win/pe_image.cc |
index 984e27d40e4e04d5e23d9d4f70a85c370bb51deb..4b5d620999a9238c5d494790a16acc22ffec1adf 100644 |
--- a/base/win/pe_image.cc |
+++ b/base/win/pe_image.cc |
@@ -12,8 +12,6 @@ |
namespace base { |
namespace win { |
-// TODO(jschuh): crbug.com/167707 Make sure this code works on 64-bit. |
- |
// Structure to perform imports enumerations. |
struct EnumAllImportsStorage { |
PEImage::EnumImportsFunction callback; |
@@ -213,11 +211,7 @@ FARPROC PEImage::GetProcAddress(LPCSTR function_name) const { |
// Check for forwarded exports as a special case. |
if (exports <= function && exports + size > function) |
-#pragma warning(push) |
-#pragma warning(disable: 4312) |
- // This cast generates a warning because it is 32 bit specific. |
- return reinterpret_cast<FARPROC>(0xFFFFFFFF); |
-#pragma warning(pop) |
+ return reinterpret_cast<FARPROC>(-1); |
return reinterpret_cast<FARPROC>(function); |
} |
@@ -456,14 +450,14 @@ bool PEImage::EnumDelayImportChunks(EnumDelayImportChunksFunction callback, |
iat = reinterpret_cast<PIMAGE_THUNK_DATA>( |
RVAToAddr(delay_descriptor->rvaIAT)); |
} else { |
-#pragma warning(push) |
-#pragma warning(disable: 4312) |
- // These casts generate warnings because they are 32 bit specific. |
- module_name = reinterpret_cast<LPCSTR>(delay_descriptor->rvaDLLName); |
- name_table = |
- reinterpret_cast<PIMAGE_THUNK_DATA>(delay_descriptor->rvaINT); |
- iat = reinterpret_cast<PIMAGE_THUNK_DATA>(delay_descriptor->rvaIAT); |
-#pragma warning(pop) |
+ // Values in IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT are 32-bit, even on 64-bit |
+ // platforms. See section 4.8 of PECOFF image spec rev 8.3. |
+ module_name = reinterpret_cast<LPCSTR>( |
+ static_cast<uintptr_t>(delay_descriptor->rvaDLLName)); |
+ name_table = reinterpret_cast<PIMAGE_THUNK_DATA>( |
+ static_cast<uintptr_t>(delay_descriptor->rvaINT)); |
+ iat = reinterpret_cast<PIMAGE_THUNK_DATA>( |
+ static_cast<uintptr_t>(delay_descriptor->rvaIAT)); |
} |
if (!callback(*this, delay_descriptor, module_name, name_table, iat, |
@@ -495,12 +489,8 @@ bool PEImage::EnumOneDelayImportChunk(EnumImportsFunction callback, |
import = reinterpret_cast<PIMAGE_IMPORT_BY_NAME>( |
RVAToAddr(name_table->u1.ForwarderString)); |
} else { |
-#pragma warning(push) |
-#pragma warning(disable: 4312) |
- // This cast generates a warning because it is 32 bit specific. |
import = reinterpret_cast<PIMAGE_IMPORT_BY_NAME>( |
name_table->u1.ForwarderString); |
-#pragma warning(pop) |
} |
hint = import->Hint; |