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();