Fix uninitialized member variable
The default constructor of FileMap was missing an initializer for the mFileMapping variables. This results in CloseHandle being called with a "random" value, which can cause havoc in Win32 process over time (e.g. in the case of libaapt2_jni.dll, which is loaded in a JVM process). Also, update the code to use "NULL" for invalid file map handle and "INVALID_HANDLE_VALUE" for invalid file handle. Bug: 38197857 Test: Stress testing on (Windows) machine Change-Id: Ibd769219d601fbafcfcee89e848b31cc5137826c
This commit is contained in:
parent
44f6592b0d
commit
b7a4f0b9e2
|
@ -48,8 +48,16 @@ using namespace android;
|
|||
|
||||
// Constructor. Create an empty object.
|
||||
FileMap::FileMap(void)
|
||||
: mFileName(NULL), mBasePtr(NULL), mBaseLength(0),
|
||||
mDataPtr(NULL), mDataLength(0)
|
||||
: mFileName(NULL),
|
||||
mBasePtr(NULL),
|
||||
mBaseLength(0),
|
||||
mDataPtr(NULL),
|
||||
mDataLength(0)
|
||||
#if defined(__MINGW32__)
|
||||
,
|
||||
mFileHandle(INVALID_HANDLE_VALUE),
|
||||
mFileMapping(NULL)
|
||||
#endif
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -65,8 +73,8 @@ FileMap::FileMap(FileMap&& other)
|
|||
other.mBasePtr = NULL;
|
||||
other.mDataPtr = NULL;
|
||||
#if defined(__MINGW32__)
|
||||
other.mFileHandle = 0;
|
||||
other.mFileMapping = 0;
|
||||
other.mFileHandle = INVALID_HANDLE_VALUE;
|
||||
other.mFileMapping = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -84,8 +92,8 @@ FileMap& FileMap::operator=(FileMap&& other) {
|
|||
#if defined(__MINGW32__)
|
||||
mFileHandle = other.mFileHandle;
|
||||
mFileMapping = other.mFileMapping;
|
||||
other.mFileHandle = 0;
|
||||
other.mFileMapping = 0;
|
||||
other.mFileHandle = INVALID_HANDLE_VALUE;
|
||||
other.mFileMapping = NULL;
|
||||
#endif
|
||||
return *this;
|
||||
}
|
||||
|
@ -101,7 +109,7 @@ FileMap::~FileMap(void)
|
|||
ALOGD("UnmapViewOfFile(%p) failed, error = %lu\n", mBasePtr,
|
||||
GetLastError() );
|
||||
}
|
||||
if (mFileMapping != INVALID_HANDLE_VALUE) {
|
||||
if (mFileMapping != NULL) {
|
||||
CloseHandle(mFileMapping);
|
||||
}
|
||||
#else
|
||||
|
@ -156,7 +164,7 @@ bool FileMap::create(const char* origFileName, int fd, off64_t offset, size_t le
|
|||
ALOGE("MapViewOfFile(%" PRId64 ", %zu) failed with error %lu\n",
|
||||
adjOffset, adjLength, GetLastError() );
|
||||
CloseHandle(mFileMapping);
|
||||
mFileMapping = INVALID_HANDLE_VALUE;
|
||||
mFileMapping = NULL;
|
||||
return false;
|
||||
}
|
||||
#else // !defined(__MINGW32__)
|
||||
|
|
Loading…
Reference in New Issue