Skip to content

Commit 119e181

Browse files
committed
Fix large memory leak in vector file writer (fix #16003)
(cherry-picked from 826a86)
1 parent 34e307b commit 119e181

File tree

2 files changed

+5
-17
lines changed

2 files changed

+5
-17
lines changed

src/core/qgsvectorfilewriter.cpp

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ QgsVectorFileWriter::QgsVectorFileWriter(
8686
: mDS( nullptr )
8787
, mLayer( nullptr )
8888
, mOgrRef( nullptr )
89-
, mGeom( nullptr )
9089
, mError( NoError )
9190
, mCodec( nullptr )
9291
, mWkbType( QGis::fromOldWkbType( geometryType ) )
@@ -103,7 +102,6 @@ QgsVectorFileWriter::QgsVectorFileWriter( const QString& vectorFileName, const Q
103102
: mDS( nullptr )
104103
, mLayer( nullptr )
105104
, mOgrRef( nullptr )
106-
, mGeom( nullptr )
107105
, mError( NoError )
108106
, mCodec( nullptr )
109107
, mWkbType( geometryType )
@@ -132,7 +130,6 @@ QgsVectorFileWriter::QgsVectorFileWriter( const QString& vectorFileName,
132130
: mDS( nullptr )
133131
, mLayer( nullptr )
134132
, mOgrRef( nullptr )
135-
, mGeom( nullptr )
136133
, mError( NoError )
137134
, mCodec( nullptr )
138135
, mWkbType( geometryType )
@@ -692,11 +689,6 @@ void QgsVectorFileWriter::init( QString vectorFileName,
692689
QgsDebugMsg( "Done creating fields" );
693690

694691
mWkbType = geometryType;
695-
if ( mWkbType != QgsWKBTypes::NoGeometry )
696-
{
697-
// create geometry which will be used for import
698-
mGeom = createEmptyGeometry( mWkbType );
699-
}
700692

701693
if ( newFilename )
702694
*newFilename = vectorFileName;
@@ -2133,7 +2125,9 @@ OGRFeatureH QgsVectorFileWriter::createFeature( QgsFeature& feature )
21332125
}
21342126
else // wkb type matches
21352127
{
2136-
OGRErr err = OGR_G_ImportFromWkb( mGeom, const_cast<unsigned char *>( geom->asWkb() ), static_cast< int >( geom->wkbSize() ) );
2128+
OGRGeometryH ogrGeom = createEmptyGeometry( mWkbType );
2129+
OGRErr err = OGR_G_ImportFromWkb( ogrGeom, const_cast<unsigned char *>( geom->asWkb() ), static_cast< int >( geom->wkbSize() ) );
2130+
21372131
if ( err != OGRERR_NONE )
21382132
{
21392133
mErrorMessage = QObject::tr( "Feature geometry not imported (OGR error: %1)" )
@@ -2144,8 +2138,8 @@ OGRFeatureH QgsVectorFileWriter::createFeature( QgsFeature& feature )
21442138
return nullptr;
21452139
}
21462140

2147-
// set geometry (ownership is not passed to OGR)
2148-
OGR_F_SetGeometry( poFeature, mGeom );
2141+
// set geometry (ownership is passed to OGR)
2142+
OGR_F_SetGeometryDirectly( poFeature, ogrGeom );
21492143
}
21502144
}
21512145
else
@@ -2182,11 +2176,6 @@ bool QgsVectorFileWriter::writeFeature( OGRLayerH layer, OGRFeatureH feature )
21822176

21832177
QgsVectorFileWriter::~QgsVectorFileWriter()
21842178
{
2185-
if ( mGeom )
2186-
{
2187-
OGR_G_DestroyGeometry( mGeom );
2188-
}
2189-
21902179
if ( mDS )
21912180
{
21922181
OGR_DS_Destroy( mDS );

src/core/qgsvectorfilewriter.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,6 @@ class CORE_EXPORT QgsVectorFileWriter
517517
OGRDataSourceH mDS;
518518
OGRLayerH mLayer;
519519
OGRSpatialReferenceH mOgrRef;
520-
OGRGeometryH mGeom;
521520

522521
QgsFields mFields;
523522

0 commit comments

Comments
 (0)