Skip to content

Commit 5ebd86d

Browse files
committed
Fix memory issues in OMSString.cpp (triggered by Snapshot.cpp) (#1356)
1 parent 0e8ac1f commit 5ebd86d

3 files changed

Lines changed: 20 additions & 0 deletions

File tree

src/OMSimulatorLib/Model.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ oms::Model::~Model()
6262
if (system)
6363
delete system;
6464

65+
for (auto const & variant : ssdVariants)
66+
free(variant.second);
67+
6568
// delete temp directory
6669
if (Flags::DeleteTempFiles())
6770
{
@@ -200,6 +203,13 @@ oms_status_enu_t oms::Model::duplicateVariant(const ComRef& crefA, const ComRef&
200203
Snapshot snapshot;
201204
snapshot.import(fullsnapshot);
202205

206+
{
207+
auto it = ssdVariants.find(snapshot.getRootCref());
208+
if (it != ssdVariants.end())
209+
{
210+
free(ssdVariants[snapshot.getRootCref()]);
211+
}
212+
}
203213
ssdVariants[snapshot.getRootCref()] = fullsnapshot;
204214

205215
// rename the model and all it components to new variant name
@@ -254,6 +264,7 @@ oms_status_enu_t oms::Model::activateVariant(const ComRef& crefA, const ComRef&
254264
variants.writeDocument(&modifiedVariant);
255265
char * newCref = NULL;
256266
importSnapshot(modifiedVariant, &newCref);
267+
free(modifiedVariant);
257268
return oms_status_ok;
258269
}
259270
}
@@ -271,6 +282,7 @@ oms_status_enu_t oms::Model::listVariants(const oms::ComRef& cref, char** conten
271282
exportSnapshot("", &fullsnapshot);
272283
Snapshot currentSnapshot;
273284
currentSnapshot.import(fullsnapshot);
285+
free(fullsnapshot);
274286

275287
pugi::xml_node oms_Variants = allVariantSnapshot.getTemplateResourceNodeSSDVariants();
276288

src/OMSimulatorLib/Scope.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,13 @@ oms_status_enu_t oms::Scope::importModel(const std::string& filename, char** _cr
244244
variants.importResourceFile(naive_uncomplete(entry.path(), model->getTempDirectory()), model->getTempDirectory());
245245
char* variantSnapshot = NULL;
246246
variants.writeDocument(&variantSnapshot);
247+
{
248+
auto it = model->ssdVariants.find(variants.getRootCref());
249+
if (it != model->ssdVariants.end())
250+
{
251+
free(model->ssdVariants[variants.getRootCref()]);
252+
}
253+
}
247254
model->ssdVariants[variants.getRootCref()] = variantSnapshot;
248255
}
249256
}

testsuite/simulation/activateVariant1.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
-- ucrt64: yes
55
-- win: no
66
-- mac: no
7+
-- asan: yes
78

89
oms_setCommandLineOption("--suppressPath=true")
910
oms_setTempDirectory("./activatevariant_01_lua/")

0 commit comments

Comments
 (0)