8253948: Memory leak in ImageFileReader
Reviewed-by: alanb
diff --git a/src/java.base/share/native/libjimage/imageFile.cpp b/src/java.base/share/native/libjimage/imageFile.cpp
index aa95637..dfdba4e 100644
--- a/src/java.base/share/native/libjimage/imageFile.cpp
+++ b/src/java.base/share/native/libjimage/imageFile.cpp
@@ -348,7 +348,8 @@
}
// Constructor intializes to a closed state.
-ImageFileReader::ImageFileReader(const char* name, bool big_endian) {
+ImageFileReader::ImageFileReader(const char* name, bool big_endian) :
+ _module_data(NULL) {
// Copy the image file name.
int len = (int) strlen(name) + 1;
_name = new char[len];
@@ -369,6 +370,10 @@
delete[] _name;
_name = NULL;
}
+
+ if (_module_data != NULL) {
+ delete _module_data;
+ }
}
// Open image file for read access.
@@ -419,9 +424,9 @@
_string_bytes = _index_data + string_bytes_offset;
// Initialize the module data
- module_data = new ImageModuleData(this);
+ _module_data = new ImageModuleData(this);
// Successful open (if memory allocation succeeded).
- return module_data != NULL;
+ return _module_data != NULL;
}
// Close image file.
@@ -436,6 +441,11 @@
osSupport::close(_fd);
_fd = -1;
}
+
+ if (_module_data != NULL) {
+ delete _module_data;
+ _module_data = NULL;
+ }
}
// Read directly from the file.
@@ -627,5 +637,5 @@
// Return the ImageModuleData for this image
ImageModuleData * ImageFileReader::get_image_module_data() {
- return module_data;
+ return _module_data;
}
diff --git a/src/java.base/share/native/libjimage/imageFile.hpp b/src/java.base/share/native/libjimage/imageFile.hpp
index 699f2ff..cad1527 100644
--- a/src/java.base/share/native/libjimage/imageFile.hpp
+++ b/src/java.base/share/native/libjimage/imageFile.hpp
@@ -423,7 +423,7 @@
u4* _offsets_table; // Location offset table
u1* _location_bytes; // Location attributes
u1* _string_bytes; // String table
- ImageModuleData *module_data; // The ImageModuleData for this image
+ ImageModuleData *_module_data; // The ImageModuleData for this image
ImageFileReader(const char* name, bool big_endian);
~ImageFileReader();