[gdal-dev] MSG Driver: two memory leaks

Christian Authmann authmanc at Mathematik.Uni-Marburg.de
Thu Jun 26 02:23:02 PDT 2014


Hello,

valgrind'ing my application revealed two memory leaks in msgdataset.cpp.

a) MSGDataset::pszProjection shall always point to a valid string during 
the lifetime of the object; the old string needs to be released before 
getting a new one from exportToWkt().

b) A spatial reference is exported to a temporary string as WKT, but the 
string is never released.


Attached you'll find a patch fixing both; valgrind confirms that both 
memory leaks are gone.


-- 
Christian Authmann
Philipps-Universität Marburg
Fachbereich Mathematik und Informatik
AG Datenbanksysteme
Hans-Meerwein-Straße
D-35032 Marburg
-------------- next part --------------
--- a/frmts/msg/msgdataset.cpp	2014-04-16 22:04:48.000000000 +0200
+++ b/frmts/msg/msgdataset.cpp	2014-06-26 13:03:19.936803801 +0200
 /************************************************************************/
@@ -248,6 +250,7 @@
 
     poDS->oSRS.SetGEOS(  0, 35785831, 0, 0 );
     poDS->oSRS.SetWellKnownGeogCS( "WGS84" ); // Temporary line to satisfy ERDAS (otherwise the ellips is "unnamed"). Eventually this should become the custom a and b ellips (CGMS).
+    CPLFree( poDS->pszProjection );
     poDS->oSRS.exportToWkt( &(poDS->pszProjection) );
 
     // The following are 3 different try-outs for also setting the ellips a and b parameters.
@@ -276,8 +279,13 @@
 /* -------------------------------------------------------------------- */
 
     char *pszLLTemp;
+    char *pszLLTemp_bak;
+
     (poDS->oSRS.GetAttrNode("GEOGCS"))->exportToWkt(&pszLLTemp);
+    pszLLTemp_bak = pszLLTemp; // importFromWkt() changes the pointer
     poDS->oLL.importFromWkt(&pszLLTemp);
+    CPLFree( pszLLTemp_bak );
+
     poDS->poTransform = OGRCreateCoordinateTransformation( &(poDS->oSRS), &(poDS->oLL) );
 
 /* -------------------------------------------------------------------- */


More information about the gdal-dev mailing list