Skip to content

Commit 868720b

Browse files
committed
Coverity null dereference fixes
1 parent a15aa74 commit 868720b

20 files changed

+116
-90
lines changed

src/app/composer/qgscomposerattributetablewidget.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -553,11 +553,14 @@ void QgsComposerAttributeTableWidget::atlasToggled()
553553
bool atlasEnabled = atlasComposition() && atlasComposition()->enabled();
554554
toggleAtlasSpecificControls( atlasEnabled );
555555

556+
if ( !mComposerTable )
557+
return;
558+
556559
mSourceComboBox->blockSignals( true );
557560
mSourceComboBox->setCurrentIndex( mSourceComboBox->findData( mComposerTable->source() ) );
558561
mSourceComboBox->blockSignals( false );
559562

560-
if ( !atlasEnabled && mComposerTable && mComposerTable->filterToAtlasFeature() )
563+
if ( !atlasEnabled && mComposerTable->filterToAtlasFeature() )
561564
{
562565
mComposerTable->setFilterToAtlasFeature( false );
563566
}

src/app/qgisapp.cpp

+14-7
Original file line numberDiff line numberDiff line change
@@ -2516,6 +2516,10 @@ void QgisApp::autoSelectAddedLayer( QList<QgsMapLayer*> layers )
25162516
if ( layers.count() )
25172517
{
25182518
QgsLayerTreeLayer* nodeLayer = QgsProject::instance()->layerTreeRoot()->findLayer( layers[0]->id() );
2519+
2520+
if ( !nodeLayer )
2521+
return;
2522+
25192523
QModelIndex index = mLayerTreeView->layerTreeModel()->node2index( nodeLayer );
25202524
mLayerTreeView->setCurrentIndex( index );
25212525
}
@@ -7456,7 +7460,10 @@ void QgisApp::loadPythonSupport()
74567460

74577461
//QgsDebugMsg("Python support library's instance() symbol resolved.");
74587462
mPythonUtils = pythonlib_inst();
7459-
mPythonUtils->initPython( mQgisInterface );
7463+
if ( mPythonUtils )
7464+
{
7465+
mPythonUtils->initPython( mQgisInterface );
7466+
}
74607467

74617468
if ( mPythonUtils && mPythonUtils->isEnabled() )
74627469
{
@@ -9205,12 +9212,6 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
92059212
bool layerHasSelection = vlayer->selectedFeatureCount() > 0;
92069213
bool layerHasActions = vlayer->actions()->size() + QgsMapLayerActionRegistry::instance()->mapLayerActions( vlayer ).size() > 0;
92079214

9208-
bool canChangeAttributes = dprovider->capabilities() & QgsVectorDataProvider::ChangeAttributeValues;
9209-
bool canDeleteFeatures = dprovider->capabilities() & QgsVectorDataProvider::DeleteFeatures;
9210-
bool canAddFeatures = dprovider->capabilities() & QgsVectorDataProvider::AddFeatures;
9211-
bool canSupportEditing = dprovider->capabilities() & QgsVectorDataProvider::EditingCapabilities;
9212-
bool canChangeGeometry = dprovider->capabilities() & QgsVectorDataProvider::ChangeGeometries;
9213-
92149215
mActionLocalHistogramStretch->setEnabled( false );
92159216
mActionFullHistogramStretch->setEnabled( false );
92169217
mActionLocalCumulativeCutStretch->setEnabled( false );
@@ -9242,6 +9243,12 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
92429243

92439244
if ( dprovider )
92449245
{
9246+
bool canChangeAttributes = dprovider->capabilities() & QgsVectorDataProvider::ChangeAttributeValues;
9247+
bool canDeleteFeatures = dprovider->capabilities() & QgsVectorDataProvider::DeleteFeatures;
9248+
bool canAddFeatures = dprovider->capabilities() & QgsVectorDataProvider::AddFeatures;
9249+
bool canSupportEditing = dprovider->capabilities() & QgsVectorDataProvider::EditingCapabilities;
9250+
bool canChangeGeometry = dprovider->capabilities() & QgsVectorDataProvider::ChangeGeometries;
9251+
92459252
mActionLayerSubsetString->setEnabled( !isEditable && dprovider->supportsSubsetString() );
92469253

92479254
mActionToggleEditing->setEnabled( canSupportEditing && !vlayer->isReadOnly() );

src/app/qgsfieldcalculator.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ void QgsFieldCalculator::accept()
137137
{
138138
builder->saveToRecent( "fieldcalc" );
139139

140+
if ( !mVectorLayer )
141+
return;
142+
140143
// Set up QgsDistanceArea each time we (re-)calculate
141144
QgsDistanceArea myDa;
142145

@@ -149,9 +152,6 @@ void QgsFieldCalculator::accept()
149152
QgsExpression exp( calcString );
150153
exp.setGeomCalculator( myDa );
151154

152-
if ( !mVectorLayer )
153-
return;
154-
155155
if ( ! exp.prepare( mVectorLayer->pendingFields() ) )
156156
{
157157
QMessageBox::critical( 0, tr( "Evaluation error" ), exp.evalErrorString() );

src/app/qgsrasterlayerproperties.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer* lyr, QgsMapCanv
173173
QgsRasterDataProvider* provider = mRasterLayer->dataProvider();
174174

175175
// Only do pyramids if dealing directly with GDAL.
176-
if ( provider->capabilities() & QgsRasterDataProvider::BuildPyramids )
176+
if ( provider && provider->capabilities() & QgsRasterDataProvider::BuildPyramids )
177177
{
178178
// initialize resampling methods
179179
cboResamplingMethod->clear();
@@ -213,7 +213,7 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer* lyr, QgsMapCanv
213213
// We can calculate histogram for all data sources but estimated only if
214214
// size is unknown - could also be enabled if well supported (estimated histogram
215215
// and and let user know that it is estimated)
216-
if ( !( provider->capabilities() & QgsRasterDataProvider::Size ) )
216+
if ( !provider || !( provider->capabilities() & QgsRasterDataProvider::Size ) )
217217
{
218218
// disable Histogram tab completely
219219
mOptsPage_Histogram->setEnabled( false );

src/app/qgsvectorlayerproperties.cpp

+32-32
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
111111
connect( htmlRadio, SIGNAL( toggled( bool ) ), insertExpressionButton, SLOT( setEnabled( bool ) ) );
112112
connect( fieldComboRadio, SIGNAL( toggled( bool ) ), displayFieldComboBox, SLOT( setEnabled( bool ) ) );
113113

114+
if ( !layer )
115+
return;
116+
114117
QVBoxLayout *layout;
115118

116119
if ( layer->hasGeometryType() )
@@ -236,38 +239,35 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
236239
mDiagramFrame->layout()->addWidget( diagramPropertiesDialog );
237240

238241
//layer title and abstract
239-
if ( layer )
240-
{
241-
mLayerTitleLineEdit->setText( layer->title() );
242-
mLayerAbstractTextEdit->setPlainText( layer->abstract() );
243-
mLayerKeywordListLineEdit->setText( layer->keywordList() );
244-
mLayerDataUrlLineEdit->setText( layer->dataUrl() );
245-
mLayerDataUrlFormatComboBox->setCurrentIndex(
246-
mLayerDataUrlFormatComboBox->findText(
247-
layer->dataUrlFormat()
248-
)
249-
);
250-
//layer attribution and metadataUrl
251-
mLayerAttributionLineEdit->setText( layer->attribution() );
252-
mLayerAttributionUrlLineEdit->setText( layer->attributionUrl() );
253-
mLayerMetadataUrlLineEdit->setText( layer->metadataUrl() );
254-
mLayerMetadataUrlTypeComboBox->setCurrentIndex(
255-
mLayerMetadataUrlTypeComboBox->findText(
256-
layer->metadataUrlType()
257-
)
258-
);
259-
mLayerMetadataUrlFormatComboBox->setCurrentIndex(
260-
mLayerMetadataUrlFormatComboBox->findText(
261-
layer->metadataUrlFormat()
262-
)
263-
);
264-
mLayerLegendUrlLineEdit->setText( layer->legendUrl() );
265-
mLayerLegendUrlFormatComboBox->setCurrentIndex(
266-
mLayerLegendUrlFormatComboBox->findText(
267-
layer->legendUrlFormat()
268-
)
269-
);
270-
}
242+
mLayerTitleLineEdit->setText( layer->title() );
243+
mLayerAbstractTextEdit->setPlainText( layer->abstract() );
244+
mLayerKeywordListLineEdit->setText( layer->keywordList() );
245+
mLayerDataUrlLineEdit->setText( layer->dataUrl() );
246+
mLayerDataUrlFormatComboBox->setCurrentIndex(
247+
mLayerDataUrlFormatComboBox->findText(
248+
layer->dataUrlFormat()
249+
)
250+
);
251+
//layer attribution and metadataUrl
252+
mLayerAttributionLineEdit->setText( layer->attribution() );
253+
mLayerAttributionUrlLineEdit->setText( layer->attributionUrl() );
254+
mLayerMetadataUrlLineEdit->setText( layer->metadataUrl() );
255+
mLayerMetadataUrlTypeComboBox->setCurrentIndex(
256+
mLayerMetadataUrlTypeComboBox->findText(
257+
layer->metadataUrlType()
258+
)
259+
);
260+
mLayerMetadataUrlFormatComboBox->setCurrentIndex(
261+
mLayerMetadataUrlFormatComboBox->findText(
262+
layer->metadataUrlFormat()
263+
)
264+
);
265+
mLayerLegendUrlLineEdit->setText( layer->legendUrl() );
266+
mLayerLegendUrlFormatComboBox->setCurrentIndex(
267+
mLayerLegendUrlFormatComboBox->findText(
268+
layer->legendUrlFormat()
269+
)
270+
);
271271

272272
QSettings settings;
273273
// if dialog hasn't been opened/closed yet, default to Styles tab, which is used most often

src/core/qgsdatumtransformstore.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,13 @@ bool QgsDatumTransformStore::hasEntryForLayer( QgsMapLayer* layer ) const
5252

5353
const QgsCoordinateTransform* QgsDatumTransformStore::transformation( QgsMapLayer* layer ) const
5454
{
55+
if ( !layer )
56+
return 0;
57+
5558
QString srcAuthId = layer->crs().authid();
5659
QString dstAuthId = mDestCRS.authid();
5760

58-
if ( !layer || srcAuthId == dstAuthId )
61+
if ( srcAuthId == dstAuthId )
5962
{
6063
return 0;
6164
}

src/core/qgsofflineediting.cpp

+13-10
Original file line numberDiff line numberDiff line change
@@ -572,17 +572,20 @@ QgsVectorLayer* QgsOfflineEditing::copyVectorLayer( QgsVectorLayer* layer, sqlit
572572
QgsLayerTreeGroup* layerTreeRoot = QgsProject::instance()->layerTreeRoot();
573573
// Find the parent group of the original layer
574574
QgsLayerTreeLayer* layerTreeLayer = layerTreeRoot->findLayer( layer->id() );
575-
QgsLayerTreeGroup* parentTreeGroup = qobject_cast<QgsLayerTreeGroup*>( layerTreeLayer->parent() );
576-
if ( parentTreeGroup )
575+
if ( layerTreeLayer )
577576
{
578-
int index = parentTreeGroup->children().indexOf( layerTreeLayer );
579-
// Move the new layer from the root group to the new group
580-
QgsLayerTreeLayer* newLayerTreeLayer = layerTreeRoot->findLayer( newLayer->id() );
581-
QgsLayerTreeNode* newLayerTreeLayerClone = newLayerTreeLayer->clone();
582-
QgsLayerTreeGroup* grp = qobject_cast<QgsLayerTreeGroup*>( newLayerTreeLayer->parent() );
583-
parentTreeGroup->insertChildNode( index, newLayerTreeLayerClone );
584-
if ( grp )
585-
grp->removeChildNode( newLayerTreeLayer );
577+
QgsLayerTreeGroup* parentTreeGroup = qobject_cast<QgsLayerTreeGroup*>( layerTreeLayer->parent() );
578+
if ( parentTreeGroup )
579+
{
580+
int index = parentTreeGroup->children().indexOf( layerTreeLayer );
581+
// Move the new layer from the root group to the new group
582+
QgsLayerTreeLayer* newLayerTreeLayer = layerTreeRoot->findLayer( newLayer->id() );
583+
QgsLayerTreeNode* newLayerTreeLayerClone = newLayerTreeLayer->clone();
584+
QgsLayerTreeGroup* grp = qobject_cast<QgsLayerTreeGroup*>( newLayerTreeLayer->parent() );
585+
parentTreeGroup->insertChildNode( index, newLayerTreeLayerClone );
586+
if ( grp )
587+
grp->removeChildNode( newLayerTreeLayer );
588+
}
586589
}
587590

588591
if ( hasLabels )

src/core/raster/qgsrasterdrawer.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,11 @@ void QgsRasterDrawer::drawImage( QPainter* p, QgsRasterViewPort* viewPort, const
112112
// which should not harm anything
113113
p->setBrush( QBrush( QColor( Qt::white ), Qt::NoBrush ) );
114114

115-
int w = theQgsMapToPixel->mapWidth();
116-
int h = theQgsMapToPixel->mapHeight();
117-
118115
if ( theQgsMapToPixel )
119116
{
117+
int w = theQgsMapToPixel->mapWidth();
118+
int h = theQgsMapToPixel->mapHeight();
119+
120120
double rotation = theQgsMapToPixel->mapRotation();
121121
if ( rotation )
122122
{

src/core/raster/qgsrasterfilewriter.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -464,9 +464,11 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste
464464
}
465465

466466
const QgsRasterInterface* iface = iter->input();
467+
if ( !iface )
468+
return SourceProviderError;
469+
467470
QGis::DataType inputDataType = iface->dataType( 1 );
468-
if ( !iface || ( inputDataType != QGis::ARGB32 &&
469-
inputDataType != QGis::ARGB32_Premultiplied ) )
471+
if ( inputDataType != QGis::ARGB32 && inputDataType != QGis::ARGB32_Premultiplied )
470472
{
471473
return SourceProviderError;
472474
}

src/core/raster/qgsrasterpipe.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,10 @@ bool QgsRasterPipe::insert( int idx, QgsRasterInterface* theInterface )
9797

9898
bool QgsRasterPipe::replace( int idx, QgsRasterInterface* theInterface )
9999
{
100+
if ( !theInterface ) return false;
101+
100102
QgsDebugMsg( QString( "replace by %1 at %2" ).arg( typeid( *theInterface ).name() ).arg( idx ) );
101103
if ( !checkBounds( idx ) ) return false;
102-
if ( !theInterface ) return false;
103104

104105
// make a copy of pipe to test connection, we test the connections
105106
// of the whole pipe, because the types and band numbers may change
@@ -152,10 +153,9 @@ void QgsRasterPipe::unsetRole( QgsRasterInterface * theInterface )
152153

153154
bool QgsRasterPipe::set( QgsRasterInterface* theInterface )
154155
{
155-
QgsDebugMsg( QString( "%1" ).arg( typeid( *theInterface ).name() ) );
156-
157156
if ( !theInterface ) return false;
158157

158+
QgsDebugMsg( QString( "%1" ).arg( typeid( *theInterface ).name() ) );
159159
Role role = interfaceRole( theInterface );
160160

161161
// We don't know where to place unknown interface

src/core/raster/qgsrasterrendererregistry.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ QgsRasterRenderer* QgsRasterRendererRegistry::defaultRendererForDrawingStyle( co
204204
break;
205205
}
206206
default:
207-
break;
207+
return 0;
208208
}
209209

210210
QgsRasterTransparency* tr = new QgsRasterTransparency(); //renderer takes ownership

src/gui/layertree/qgslayertreeview.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,8 @@ void QgsLayerTreeView::onCurrentChanged()
197197
if ( layerCurrent )
198198
{
199199
QgsLayerTreeLayer* nodeLayer = layerTreeModel()->rootGroup()->findLayer( layerCurrentID );
200-
nodeLayerIndex = layerTreeModel()->node2index( nodeLayer );
200+
if ( nodeLayer )
201+
nodeLayerIndex = layerTreeModel()->node2index( nodeLayer );
201202
}
202203
layerTreeModel()->setCurrentIndex( nodeLayerIndex );
203204

src/gui/symbology-ng/qgsellipsesymbollayerv2widget.cpp

+13-13
Original file line numberDiff line numberDiff line change
@@ -93,19 +93,19 @@ void QgsEllipseSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer )
9393

9494
//set combo entries to current values
9595
blockComboSignals( true );
96-
mSymbolWidthUnitWidget->setUnit( mLayer->symbolWidthUnit() );
97-
mSymbolWidthUnitWidget->setMapUnitScale( mLayer->symbolWidthMapUnitScale() );
98-
mOutlineWidthUnitWidget->setUnit( mLayer->outlineWidthUnit() );
99-
mOutlineWidthUnitWidget->setMapUnitScale( mLayer->outlineWidthMapUnitScale() );
100-
mSymbolHeightUnitWidget->setUnit( mLayer->symbolHeightUnit() );
101-
mSymbolHeightUnitWidget->setMapUnitScale( mLayer->symbolHeightMapUnitScale() );
102-
mOffsetUnitWidget->setUnit( mLayer->offsetUnit() );
103-
mOffsetUnitWidget->setMapUnitScale( mLayer->offsetMapUnitScale() );
104-
QPointF offsetPt = mLayer->offset();
105-
spinOffsetX->setValue( offsetPt.x() );
106-
spinOffsetY->setValue( offsetPt.y() );
107-
mHorizontalAnchorComboBox->setCurrentIndex( mLayer->horizontalAnchorPoint() );
108-
mVerticalAnchorComboBox->setCurrentIndex( mLayer->verticalAnchorPoint() );
96+
mSymbolWidthUnitWidget->setUnit( mLayer->symbolWidthUnit() );
97+
mSymbolWidthUnitWidget->setMapUnitScale( mLayer->symbolWidthMapUnitScale() );
98+
mOutlineWidthUnitWidget->setUnit( mLayer->outlineWidthUnit() );
99+
mOutlineWidthUnitWidget->setMapUnitScale( mLayer->outlineWidthMapUnitScale() );
100+
mSymbolHeightUnitWidget->setUnit( mLayer->symbolHeightUnit() );
101+
mSymbolHeightUnitWidget->setMapUnitScale( mLayer->symbolHeightMapUnitScale() );
102+
mOffsetUnitWidget->setUnit( mLayer->offsetUnit() );
103+
mOffsetUnitWidget->setMapUnitScale( mLayer->offsetMapUnitScale() );
104+
QPointF offsetPt = mLayer->offset();
105+
spinOffsetX->setValue( offsetPt.x() );
106+
spinOffsetY->setValue( offsetPt.y() );
107+
mHorizontalAnchorComboBox->setCurrentIndex( mLayer->horizontalAnchorPoint() );
108+
mVerticalAnchorComboBox->setCurrentIndex( mLayer->verticalAnchorPoint() );
109109
blockComboSignals( false );
110110

111111
registerDataDefinedButton( mSymbolWidthDDBtn, "width", QgsDataDefinedButton::Double, QgsDataDefinedButton::doublePosDesc() );

src/gui/symbology-ng/qgspointdisplacementrendererwidget.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ QgsPointDisplacementRendererWidget::QgsPointDisplacementRendererWidget( QgsVecto
124124
blockAllSignals( false );
125125

126126
//set the appropriate renderer dialog
127-
if ( mRenderer && mRenderer->embeddedRenderer() )
127+
if ( mRenderer->embeddedRenderer() )
128128
{
129129
QString rendererName = mRenderer->embeddedRenderer()->type();
130130
int rendererIndex = mRendererComboBox->findData( rendererName );

src/plugins/georeferencer/qgsgcplistmodel.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ void QgsGCPListModel::updateModel()
111111
{
112112
int j = 0;
113113
QgsGeorefDataPoint *p = mGCPList->at( i );
114+
115+
if ( !p )
116+
continue;
117+
114118
p->setId( i );
115119

116120
QStandardItem *si = new QStandardItem();
@@ -159,10 +163,7 @@ void QgsGCPListModel::updateModel()
159163
}
160164
residual = sqrt( dX * dX + dY * dY );
161165

162-
if ( p )
163-
{
164-
p->setResidual( QPointF( dX, dY ) );
165-
}
166+
p->setResidual( QPointF( dX, dY ) );
166167

167168
if ( residual >= 0.f )
168169
{

src/plugins/spatialquery/qgsspatialquerydialog.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,8 @@ void QgsSpatialQueryDialog::evaluateCheckBoxLayer( bool isTarget )
159159
lyr = mLayerReference;
160160
checkbox = ckbUsingSelectedReference;
161161
}
162-
int selectedCount = lyr->selectedFeatureCount();
163-
bool isCheckBoxValid = ( lyr != NULL && selectedCount > 0 );
162+
int selectedCount = lyr ? lyr->selectedFeatureCount() : 0;
163+
bool isCheckBoxValid = selectedCount > 0;
164164
checkbox->setChecked( isCheckBoxValid );
165165
checkbox->setEnabled( isCheckBoxValid );
166166
QString textCheckBox = isCheckBoxValid

src/plugins/topology/topolTest.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ bool topolTest::testCancelled()
143143
return false;
144144
}
145145

146+
#if 0 //unused and totally broken - index is set to null and then immediately dereferenced
146147
ErrorList topolTest::checkCloseFeature( double tolerance, QgsVectorLayer* layer1, QgsVectorLayer* layer2, bool isExtent )
147148
{
148149
Q_UNUSED( isExtent );
@@ -223,6 +224,7 @@ ErrorList topolTest::checkCloseFeature( double tolerance, QgsVectorLayer* layer1
223224

224225
return errorList;
225226
}
227+
#endif
226228

227229
ErrorList topolTest::checkDanglingLines( double tolerance, QgsVectorLayer* layer1, QgsVectorLayer* layer2, bool isExtent )
228230
{

0 commit comments

Comments
 (0)