8141571: jdk/internal/jimage/JImageReadTest.java crashing in msvcr120.dll
Add asserts to diagnose Reviewed-by: jlaskey
This commit is contained in:
parent
09c0550556
commit
bb5de762da
@ -202,6 +202,9 @@ static jlong* JIMAGE_FindAttributes(JNIEnv *env, jlong* rawAttributes, jbyte* ra
|
|||||||
if (reader == NULL) return NULL;
|
if (reader == NULL) return NULL;
|
||||||
// Convert byte array to a cstring.
|
// Convert byte array to a cstring.
|
||||||
char* path = new char[size + 1];
|
char* path = new char[size + 1];
|
||||||
|
if (path == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
memcpy(path, rawBytes, size);
|
memcpy(path, rawBytes, size);
|
||||||
path[size] = '\0';
|
path[size] = '\0';
|
||||||
// Locate resource location data.
|
// Locate resource location data.
|
||||||
|
@ -149,6 +149,7 @@ ImageModuleData::ImageModuleData(const ImageFileReader* image_file,
|
|||||||
if (found) {
|
if (found) {
|
||||||
u8 data_size = location.get_attribute(ImageLocation::ATTRIBUTE_UNCOMPRESSED);
|
u8 data_size = location.get_attribute(ImageLocation::ATTRIBUTE_UNCOMPRESSED);
|
||||||
_data = new u1[(size_t)data_size];
|
_data = new u1[(size_t)data_size];
|
||||||
|
assert(_data != NULL && "allocation failed");
|
||||||
_image_file->get_resource(location, _data);
|
_image_file->get_resource(location, _data);
|
||||||
// Map out the header.
|
// Map out the header.
|
||||||
_header = (Header*)_data;
|
_header = (Header*)_data;
|
||||||
@ -254,6 +255,7 @@ const char** ImageModuleData::module_to_packages(const char* module_name) {
|
|||||||
// Construct an array of all the package entries.
|
// Construct an array of all the package entries.
|
||||||
u4 count = data->package_count(_endian);
|
u4 count = data->package_count(_endian);
|
||||||
const char** packages = new const char*[count + 1];
|
const char** packages = new const char*[count + 1];
|
||||||
|
assert(packages != NULL && "allocation failed");
|
||||||
s4 package_offset = data->package_offset(_endian);
|
s4 package_offset = data->package_offset(_endian);
|
||||||
for (u4 i = 0; i < count; i++) {
|
for (u4 i = 0; i < count; i++) {
|
||||||
u4 package_name_offset = mtp_package(package_offset + i);
|
u4 package_name_offset = mtp_package(package_offset + i);
|
||||||
@ -271,6 +273,7 @@ const char** ImageModuleData::module_to_packages(const char* module_name) {
|
|||||||
// to share an open image.
|
// to share an open image.
|
||||||
ImageFileReaderTable::ImageFileReaderTable() : _count(0), _max(_growth) {
|
ImageFileReaderTable::ImageFileReaderTable() : _count(0), _max(_growth) {
|
||||||
_table = new ImageFileReader*[_max];
|
_table = new ImageFileReader*[_max];
|
||||||
|
assert( _table != NULL && "allocation failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageFileReaderTable::~ImageFileReaderTable() {
|
ImageFileReaderTable::~ImageFileReaderTable() {
|
||||||
@ -330,6 +333,7 @@ ImageFileReader* ImageFileReader::open(const char* name, bool big_endian) {
|
|||||||
// Retrieve table entry.
|
// Retrieve table entry.
|
||||||
ImageFileReader* reader = _reader_table.get(i);
|
ImageFileReader* reader = _reader_table.get(i);
|
||||||
// If name matches, then reuse (bump up use count.)
|
// If name matches, then reuse (bump up use count.)
|
||||||
|
assert(reader->name() != NULL && "reader->name must not be null");
|
||||||
if (strcmp(reader->name(), name) == 0) {
|
if (strcmp(reader->name(), name) == 0) {
|
||||||
reader->inc_use();
|
reader->inc_use();
|
||||||
return reader;
|
return reader;
|
||||||
@ -339,20 +343,20 @@ ImageFileReader* ImageFileReader::open(const char* name, bool big_endian) {
|
|||||||
|
|
||||||
// Need a new image reader.
|
// Need a new image reader.
|
||||||
ImageFileReader* reader = new ImageFileReader(name, big_endian);
|
ImageFileReader* reader = new ImageFileReader(name, big_endian);
|
||||||
bool opened = reader->open();
|
if (reader == NULL || !reader->open()) {
|
||||||
// If failed to open.
|
// Failed to open.
|
||||||
if (!opened) {
|
|
||||||
delete reader;
|
delete reader;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lock to update
|
// Lock to update
|
||||||
SimpleCriticalSectionLock cs(&_reader_table_lock);
|
SimpleCriticalSectionLock cs(&_reader_table_lock);
|
||||||
// Search for an exist image file.
|
// Search for an existing image file.
|
||||||
for (u4 i = 0; i < _reader_table.count(); i++) {
|
for (u4 i = 0; i < _reader_table.count(); i++) {
|
||||||
// Retrieve table entry.
|
// Retrieve table entry.
|
||||||
ImageFileReader* existing_reader = _reader_table.get(i);
|
ImageFileReader* existing_reader = _reader_table.get(i);
|
||||||
// If name matches, then reuse (bump up use count.)
|
// If name matches, then reuse (bump up use count.)
|
||||||
|
assert(reader->name() != NULL && "reader->name still must not be null");
|
||||||
if (strcmp(existing_reader->name(), name) == 0) {
|
if (strcmp(existing_reader->name(), name) == 0) {
|
||||||
existing_reader->inc_use();
|
existing_reader->inc_use();
|
||||||
reader->close();
|
reader->close();
|
||||||
@ -401,6 +405,7 @@ ImageFileReader::ImageFileReader(const char* name, bool big_endian) {
|
|||||||
// Copy the image file name.
|
// Copy the image file name.
|
||||||
int len = (int) strlen(name) + 1;
|
int len = (int) strlen(name) + 1;
|
||||||
_name = new char[len];
|
_name = new char[len];
|
||||||
|
assert(_name != NULL && "allocation failed");
|
||||||
strncpy(_name, name, len);
|
strncpy(_name, name, len);
|
||||||
// Initialize for a closed file.
|
// Initialize for a closed file.
|
||||||
_fd = -1;
|
_fd = -1;
|
||||||
@ -473,8 +478,8 @@ bool ImageFileReader::open() {
|
|||||||
// Initialize the module data
|
// Initialize the module data
|
||||||
ImageModuleData::module_data_name(buffer, _name);
|
ImageModuleData::module_data_name(buffer, _name);
|
||||||
module_data = new ImageModuleData(this, buffer);
|
module_data = new ImageModuleData(this, buffer);
|
||||||
// Successful open.
|
// Successful open (if memory allocation succeeded).
|
||||||
return true;
|
return module_data != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close image file.
|
// Close image file.
|
||||||
@ -655,6 +660,7 @@ void ImageFileReader::get_resource(ImageLocation& location, u1* uncompressed_dat
|
|||||||
if (!MemoryMapImage) {
|
if (!MemoryMapImage) {
|
||||||
// Allocate buffer for compression.
|
// Allocate buffer for compression.
|
||||||
compressed_data = new u1[(u4)compressed_size];
|
compressed_data = new u1[(u4)compressed_size];
|
||||||
|
assert (compressed_data != NULL && "allocation failed");
|
||||||
// Read bytes from offset beyond the image index.
|
// Read bytes from offset beyond the image index.
|
||||||
bool is_read = read_at(compressed_data, compressed_size, _index_size + offset);
|
bool is_read = read_at(compressed_data, compressed_size, _index_size + offset);
|
||||||
assert(is_read && "error reading from image or short read");
|
assert(is_read && "error reading from image or short read");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user