Salome HOME
Fix memory corruption introduced into ef9db08c8153
[modules/smesh.git] / src / MEDWrapper / MED_TFile.hxx
index 70a5402cc1cdb3f798172890ce3251e34e5bb501..09634f89167e5ee04e62c74b5b4b6e1a3f10a74b 100644 (file)
@@ -73,12 +73,14 @@ namespace MED
   class MEDWRAPPER_EXPORT TMemFile : public MEDIDTHoder
   {
   public:
-    TMemFile(bool* isClosedStatus = nullptr):MEDIDTHoder(isClosedStatus) { memfile.app_image_ptr=nullptr; memfile.app_image_size=0; }
-    TMemFile(void *data, std::size_t sz, bool* isClosedStatus):MEDIDTHoder(isClosedStatus) { memfile.app_image_ptr=data; memfile.app_image_size=sz; }
+    TMemFile(void **data, std::size_t *sz, bool* isClosedStatus):MEDIDTHoder(isClosedStatus),_data(data),_sz(sz) { memfile.app_image_ptr=*data; memfile.app_image_size=*sz; }
+    ~TMemFile() { UnRefFid(); if(myIsClosed) { *_data = memfile.app_image_ptr; *_sz = memfile.app_image_size; } }
     void Open(EModeAcces theMode, TErr* theErr = nullptr) override;
     void *getData() const { return memfile.app_image_ptr; }
     std::size_t getSize() const { return memfile.app_image_size; }
   private:
+    void **_data = nullptr;
+    std::size_t * _sz = nullptr;
     med_memfile memfile = MED_MEMFILE_INIT;
   };