XTCFormat::ReadMolecule() used to pass a pointer to the storage of a local std::vector to OBMol::SetConformers() after the vector itself was destroyed. This leads to OBMol::_vconf pointing to freed memory, reading garbage (as mentioned previously in http://forums.openbabel.org/Reading-XTC-format-does-not-seem-to-work-tp3675197p3733137.html ) and finally a crash when the memory is freed for the second time by OBMol's ~OBMol() or SetConformers().
There's no reason to use a std::vector here when one doesn't want its
automatic lifetime management.
---
src/formats/xtcformat.cpp | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/formats/xtcformat.cpp b/src/formats/xtcformat.cpp
index c58b2b4..c2bcaaa 100644
--- a/src/formats/xtcformat.cpp
+++ b/src/formats/xtcformat.cpp
@@ -184,12 +184,11 @@ namespace OpenBabel
// Convert positions from single to double precision and convert from
// nm to A
- std::vector<double> confs;
- confs.resize(natoms * 3);
+ double* confs = new double[natoms * 3];
for (int i=0; i < natoms * 3; ++i) // unroll??
confs[i] = static_cast<double>(10.0 * floatCoord.at(i));
- vconf.push_back(&confs[0]);
+ vconf.push_back(confs);
}
// Close the XDR file
--
1.9.3
smime.p7s
Description: S/MIME cryptographic signature
------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/
_______________________________________________ OpenBabel-Devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openbabel-devel
