Commit 84a70491 authored by Will Harris's avatar Will Harris Committed by Commit Bot

Fix RVAToAddr to correctly handle 64-bit thunk pointers.

IMAGE_THUNK_DATA.ForwarderString is 64-bit on 64-bit platforms.

../../base/win/pe_image.cc(422,36):  error: implicit conversion loses integer precision: 'ULONGLONG' (aka 'unsigned long long') to 'DWORD' (aka 'unsigned long') [-Werror,-Wshorten-64-to-32]
          RVAToAddr(name_table->u1.ForwarderString));
          ~~~~~~~~~ ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
../../base/win/pe_image.cc(504,47):  error: implicit conversion loses integer precision: 'ULONGLONG' (aka 'unsigned long long') to 'DWORD' (aka 'unsigned long') [-Werror,-Wshorten-64-to-32]
                     RVAToAddr(name_table->u1.ForwarderString));
                     ~~~~~~~~~ ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~

BUG=588506

Change-Id: I9b6b05611bc3301cf9459f2bf7847975cc2b3c93
Reviewed-on: https://chromium-review.googlesource.com/1183852Reviewed-by: default avatarBruce Dawson <brucedawson@chromium.org>
Commit-Queue: Will Harris <wfh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#585290}
parent f4dc47cd
......@@ -545,7 +545,8 @@ bool PEImage::VerifyMagic() const {
return true;
}
bool PEImage::ImageRVAToOnDiskOffset(DWORD rva, DWORD* on_disk_offset) const {
bool PEImage::ImageRVAToOnDiskOffset(uintptr_t rva,
DWORD* on_disk_offset) const {
LPVOID address = RVAToAddr(rva);
return ImageAddrToOnDiskOffset(address, on_disk_offset);
}
......@@ -570,7 +571,7 @@ bool PEImage::ImageAddrToOnDiskOffset(LPVOID address,
return true;
}
PVOID PEImage::RVAToAddr(DWORD rva) const {
PVOID PEImage::RVAToAddr(uintptr_t rva) const {
if (rva == 0)
return NULL;
......@@ -594,7 +595,7 @@ const IMAGE_DATA_DIRECTORY* PEImage::GetDataDirectory(UINT directory) const {
return &nt_headers->OptionalHeader.DataDirectory[directory];
}
PVOID PEImageAsData::RVAToAddr(DWORD rva) const {
PVOID PEImageAsData::RVAToAddr(uintptr_t rva) const {
if (rva == 0)
return NULL;
......
......@@ -11,6 +11,8 @@
#ifndef BASE_WIN_PE_IMAGE_H_
#define BASE_WIN_PE_IMAGE_H_
#include <stdint.h>
#include <windows.h>
#if defined(_WIN32_WINNT_WIN8)
......@@ -231,11 +233,11 @@ class PEImage {
bool VerifyMagic() const;
// Converts an rva value to the appropriate address.
virtual PVOID RVAToAddr(DWORD rva) const;
virtual PVOID RVAToAddr(uintptr_t rva) const;
// Converts an rva value to an offset on disk.
// Returns true on success.
bool ImageRVAToOnDiskOffset(DWORD rva, DWORD *on_disk_offset) const;
bool ImageRVAToOnDiskOffset(uintptr_t rva, DWORD* on_disk_offset) const;
// Converts an address to an offset on disk.
// Returns true on success.
......@@ -255,7 +257,7 @@ class PEImageAsData : public PEImage {
public:
explicit PEImageAsData(HMODULE hModule) : PEImage(hModule) {}
PVOID RVAToAddr(DWORD rva) const override;
PVOID RVAToAddr(uintptr_t rva) const override;
};
inline bool PEImage::IsOrdinal(LPCSTR name) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment