Skip to content

Commit 4e0431d

Browse files
committed
Coverity fixes (unchecked dynamic_cast)
1 parent 868720b commit 4e0431d

18 files changed

+92
-37
lines changed

src/app/qgsfieldsproperties.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,10 @@ QTreeWidgetItem *QgsFieldsProperties::loadAttributeEditorTreeItem( QgsAttributeE
165165
newWidget = mDesignerTree->addItem( parent, DesignerTreeItemData( DesignerTreeItemData::Container, widgetDef->name() ) );
166166

167167
const QgsAttributeEditorContainer* container = dynamic_cast<const QgsAttributeEditorContainer*>( widgetDef );
168+
if ( !container )
169+
{
170+
break;
171+
}
168172

169173
Q_FOREACH ( QgsAttributeEditorElement* wdg, container->children() )
170174
{

src/core/dxf/qgsdxfexport.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -3224,7 +3224,7 @@ void QgsDxfExport::writePoint( const QgsPoint& pt, const QString& layer, QColor
32243224
{
32253225
//write symbol directly here
32263226
const QgsMarkerSymbolLayerV2* msl = dynamic_cast< const QgsMarkerSymbolLayerV2* >( symbolLayer );
3227-
if ( symbolLayer && symbol )
3227+
if ( msl && symbol )
32283228
{
32293229
QgsRenderContext ct;
32303230
QgsSymbolV2RenderContext ctx( ct, QgsSymbolV2::MapUnit, symbol->alpha(), false, symbol->renderHints(), f );

src/core/dxf/qgsdxfpallabeling.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ void QgsDxfPalLabeling::drawLabel( pal::LabelPosition* label, QgsRenderContext&
7575
if ( mDxfExport )
7676
{
7777
QgsPalGeometry *g = dynamic_cast< QgsPalGeometry* >( label->getFeaturePart()->getUserGeometry() );
78+
if ( !g )
79+
return;
7880

7981
//label text
8082
QString text = g->text();

src/core/layertree/qgslayertreemodel.cpp

+5-7
Original file line numberDiff line numberDiff line change
@@ -194,23 +194,21 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const
194194
QgsRasterLayer* rlayer = qobject_cast<QgsRasterLayer *>( layer );
195195
return QIcon( rlayer->previewAsPixmap( QSize( 32, 32 ) ) );
196196
}
197+
else
198+
{
199+
return QgsLayerItem::iconRaster();
200+
}
197201
}
198202

199203
QgsVectorLayer *vlayer = dynamic_cast<QgsVectorLayer*>( layer );
200-
201-
if ( layer->type() == QgsMapLayer::RasterLayer )
202-
{
203-
return QgsLayerItem::iconRaster();
204-
}
205-
206204
QIcon icon;
207205

208206
// if there's just on legend entry that should be embedded in layer - do that!
209207
if ( testFlag( ShowLegend ) && legendEmbeddedInParent( nodeLayer ) )
210208
{
211209
icon = legendIconEmbeddedInParent( nodeLayer );
212210
}
213-
else if ( layer->type() == QgsMapLayer::VectorLayer )
211+
else if ( vlayer && layer->type() == QgsMapLayer::VectorLayer )
214212
{
215213
if ( vlayer->geometryType() == QGis::Point )
216214
icon = QgsLayerItem::iconPoint();

src/core/qgsdataitem.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,9 @@ bool QgsLayerItem::equal( const QgsDataItem *other )
659659
}
660660
//const QgsLayerItem *o = qobject_cast<const QgsLayerItem *> ( other );
661661
const QgsLayerItem *o = dynamic_cast<const QgsLayerItem *>( other );
662+
if ( !o )
663+
return false;
664+
662665
return ( mPath == o->mPath && mName == o->mName && mUri == o->mUri && mProviderKey == o->mProviderKey );
663666
}
664667

src/core/qgspointlocator.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,9 @@ class QgsPointLocator_DumpTree : public SpatialIndex::IQueryStrategy
529529
void getNextEntry( const IEntry& entry, id_type& nextEntry, bool& hasNext ) override
530530
{
531531
const INode* n = dynamic_cast<const INode*>( &entry );
532+
if ( !n )
533+
return;
534+
532535
qDebug( "NODE: %ld", n->getIdentifier() );
533536
if ( n->getLevel() > 0 )
534537
{

src/core/symbology-ng/qgscptcityarchive.cpp

+10-7
Original file line numberDiff line numberDiff line change
@@ -1531,15 +1531,18 @@ QModelIndex QgsCptCityBrowserModel::findPath( QString path )
15311531
if ( item->type() == QgsCptCityDataItem::Selection )
15321532
{
15331533
const QgsCptCitySelectionItem* selItem = dynamic_cast<const QgsCptCitySelectionItem *>( item );
1534-
foreach ( QString childPath, selItem->selectionsList() )
1534+
if ( selItem )
15351535
{
1536-
if ( childPath.endsWith( "/" ) )
1537-
childPath.chop( 1 );
1538-
// QgsDebugMsg( "childPath= " + childPath );
1539-
if ( path.startsWith( childPath ) )
1536+
foreach ( QString childPath, selItem->selectionsList() )
15401537
{
1541-
foundParent = true;
1542-
break;
1538+
if ( childPath.endsWith( "/" ) )
1539+
childPath.chop( 1 );
1540+
// QgsDebugMsg( "childPath= " + childPath );
1541+
if ( path.startsWith( childPath ) )
1542+
{
1543+
foundParent = true;
1544+
break;
1545+
}
15431546
}
15441547
}
15451548
}

src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -1575,12 +1575,14 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::convertFromRenderer(
15751575
if ( renderer->type() == "pointDisplacement" )
15761576
{
15771577
const QgsPointDisplacementRenderer* pointDisplacementRenderer = dynamic_cast<const QgsPointDisplacementRenderer*>( renderer );
1578-
return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() );
1578+
if ( pointDisplacementRenderer )
1579+
return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() );
15791580
}
15801581
if ( renderer->type() == "invertedPolygonRenderer" )
15811582
{
15821583
const QgsInvertedPolygonRenderer* invertedPolygonRenderer = dynamic_cast<const QgsInvertedPolygonRenderer*>( renderer );
1583-
return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() );
1584+
if ( invertedPolygonRenderer )
1585+
return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() );
15841586
}
15851587

15861588
// If not one of the specifically handled renderers, then just grab the symbol from the renderer

src/core/symbology-ng/qgsrulebasedrendererv2.cpp

+9-2
Original file line numberDiff line numberDiff line change
@@ -1081,6 +1081,9 @@ QgsRuleBasedRendererV2* QgsRuleBasedRendererV2::convertFromRenderer( const QgsFe
10811081
if ( renderer->type() == "singleSymbol" )
10821082
{
10831083
const QgsSingleSymbolRendererV2* singleSymbolRenderer = dynamic_cast<const QgsSingleSymbolRendererV2*>( renderer );
1084+
if ( !singleSymbolRenderer )
1085+
return 0;
1086+
10841087
QgsSymbolV2* origSymbol = singleSymbolRenderer->symbol()->clone();
10851088
convertToDataDefinedSymbology( origSymbol, singleSymbolRenderer->sizeScaleField(), singleSymbolRenderer->rotationField() );
10861089
return new QgsRuleBasedRendererV2( origSymbol );
@@ -1141,6 +1144,8 @@ QgsRuleBasedRendererV2* QgsRuleBasedRendererV2::convertFromRenderer( const QgsFe
11411144
{
11421145

11431146
const QgsGraduatedSymbolRendererV2* graduatedRenderer = dynamic_cast<const QgsGraduatedSymbolRendererV2*>( renderer );
1147+
if ( !graduatedRenderer )
1148+
return 0;
11441149

11451150
QgsRuleBasedRendererV2::Rule* rootrule = new QgsRuleBasedRendererV2::Rule( NULL );
11461151

@@ -1181,12 +1186,14 @@ QgsRuleBasedRendererV2* QgsRuleBasedRendererV2::convertFromRenderer( const QgsFe
11811186
if ( renderer->type() == "pointDisplacement" )
11821187
{
11831188
const QgsPointDisplacementRenderer* pointDisplacementRenderer = dynamic_cast<const QgsPointDisplacementRenderer*>( renderer );
1184-
return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() );
1189+
if ( pointDisplacementRenderer )
1190+
return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() );
11851191
}
11861192
if ( renderer->type() == "invertedPolygonRenderer" )
11871193
{
11881194
const QgsInvertedPolygonRenderer* invertedPolygonRenderer = dynamic_cast<const QgsInvertedPolygonRenderer*>( renderer );
1189-
return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() );
1195+
if ( invertedPolygonRenderer )
1196+
return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() );
11901197
}
11911198

11921199
return NULL;

src/core/symbology-ng/qgssinglesymbolrendererv2.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -392,13 +392,14 @@ QgsSingleSymbolRendererV2* QgsSingleSymbolRendererV2::convertFromRenderer( const
392392
if ( renderer->type() == "pointDisplacement" )
393393
{
394394
const QgsPointDisplacementRenderer* pointDisplacementRenderer = dynamic_cast<const QgsPointDisplacementRenderer*>( renderer );
395-
return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() );
395+
if ( pointDisplacementRenderer )
396+
return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() );
396397
}
397398
if ( renderer->type() == "invertedPolygonRenderer" )
398399
{
399400
const QgsInvertedPolygonRenderer* invertedPolygonRenderer = dynamic_cast<const QgsInvertedPolygonRenderer*>( renderer );
400-
return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() );
401-
401+
if ( invertedPolygonRenderer )
402+
return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() );
402403
}
403404

404405
QgsSymbolV2List symbols = const_cast<QgsFeatureRendererV2 *>( renderer )->symbols();

src/gui/qgsattributeform.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,9 @@ void QgsAttributeForm::init()
386386
if ( widgDef->type() == QgsAttributeEditorElement::AeTypeContainer )
387387
{
388388
QgsAttributeEditorContainer* containerDef = dynamic_cast<QgsAttributeEditorContainer*>( widgDef );
389+
if ( !containerDef )
390+
continue;
391+
389392
containerDef->setIsGroupBox( false ); // Toplevel widgets are tabs not groupboxes
390393
QString dummy1;
391394
bool dummy2;
@@ -565,6 +568,9 @@ QWidget* QgsAttributeForm::createWidgetFromDef( const QgsAttributeEditorElement
565568
case QgsAttributeEditorElement::AeTypeField:
566569
{
567570
const QgsAttributeEditorField* fieldDef = dynamic_cast<const QgsAttributeEditorField*>( widgetDef );
571+
if ( !fieldDef )
572+
break;
573+
568574
int fldIdx = fieldDef->idx();
569575
if ( fldIdx < vl->pendingFields().count() && fldIdx >= 0 )
570576
{
@@ -600,8 +606,10 @@ QWidget* QgsAttributeForm::createWidgetFromDef( const QgsAttributeEditorElement
600606
case QgsAttributeEditorElement::AeTypeContainer:
601607
{
602608
const QgsAttributeEditorContainer* container = dynamic_cast<const QgsAttributeEditorContainer*>( widgetDef );
603-
QWidget* myContainer;
609+
if ( !container )
610+
break;
604611

612+
QWidget* myContainer;
605613
if ( container->isGroupBox() )
606614
{
607615
QGroupBox* groupBox = new QGroupBox( parent );
@@ -760,7 +768,7 @@ bool QgsAttributeForm::eventFilter( QObject* object, QEvent* e )
760768
if ( e->type() == QEvent::KeyPress )
761769
{
762770
QKeyEvent* keyEvent = dynamic_cast<QKeyEvent*>( e );
763-
if ( keyEvent->key() == Qt::Key_Escape )
771+
if ( keyEvent && keyEvent->key() == Qt::Key_Escape )
764772
{
765773
// Re-emit to this form so it will be forwarded to parent
766774
event( e );

src/gui/qgsexpressionbuilderwidget.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ void QgsExpressionBuilderWidget::loadSampleValues()
565565
QgsExpressionItem* item = dynamic_cast<QgsExpressionItem*>( mModel->itemFromIndex( idx ) );
566566
// TODO We should really return a error the user of the widget that
567567
// the there is no layer set.
568-
if ( !mLayer )
568+
if ( !mLayer || !item )
569569
return;
570570

571571
mValueGroupBox->show();
@@ -580,7 +580,7 @@ void QgsExpressionBuilderWidget::loadAllValues()
580580
QgsExpressionItem* item = dynamic_cast<QgsExpressionItem*>( mModel->itemFromIndex( idx ) );
581581
// TODO We should really return a error the user of the widget that
582582
// the there is no layer set.
583-
if ( !mLayer )
583+
if ( !mLayer || !item )
584584
return;
585585

586586
mValueGroupBox->show();

src/gui/qgsfieldexpressionwidget.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ void QgsFieldExpressionWidget::setFilters( QgsFieldProxyModel::Filters filters )
7171
void QgsFieldExpressionWidget::setLeftHandButtonStyle( bool isLeft )
7272
{
7373
QHBoxLayout* layout = dynamic_cast<QHBoxLayout*>( this->layout() );
74+
if ( !layout )
75+
return;
76+
7477
if ( isLeft )
7578
{
7679
QLayoutItem* item = layout->takeAt( 1 );

src/gui/symbology-ng/qgsrendererv2widget.cpp

+11-4
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,16 @@ void QgsRendererV2Widget::changeSymbolWidth()
129129
}
130130

131131
bool ok;
132-
double width = QInputDialog::getDouble( this, tr( "Width" ), tr( "Change symbol width" ), dynamic_cast<QgsLineSymbolV2*>( symbolList.at( 0 ) )->width(), 0.0, 999999, 1, &ok );
132+
QgsLineSymbolV2* line = dynamic_cast<QgsLineSymbolV2*>( symbolList.at( 0 ) ) ;
133+
double width = QInputDialog::getDouble( this, tr( "Width" ), tr( "Change symbol width" ), line ? line->width() : 0.0 , 0.0, 999999, 1, &ok );
133134
if ( ok )
134135
{
135136
QList<QgsSymbolV2*>::iterator symbolIt = symbolList.begin();
136137
for ( ; symbolIt != symbolList.end(); ++symbolIt )
137138
{
138-
dynamic_cast<QgsLineSymbolV2*>( *symbolIt )->setWidth( width );
139+
line = dynamic_cast<QgsLineSymbolV2*>( *symbolIt );
140+
if ( line )
141+
line->setWidth( width );
139142
}
140143
refreshSymbolView();
141144
}
@@ -150,13 +153,17 @@ void QgsRendererV2Widget::changeSymbolSize()
150153
}
151154

152155
bool ok;
153-
double size = QInputDialog::getDouble( this, tr( "Size" ), tr( "Change symbol size" ), dynamic_cast<QgsMarkerSymbolV2*>( symbolList.at( 0 ) )->size(), 0.0, 999999, 1, &ok );
156+
QgsMarkerSymbolV2* marker = dynamic_cast<QgsMarkerSymbolV2*>( symbolList.at( 0 ) );
157+
158+
double size = QInputDialog::getDouble( this, tr( "Size" ), tr( "Change symbol size" ), marker ? marker->size() : 0.0 , 0.0, 999999, 1, &ok );
154159
if ( ok )
155160
{
156161
QList<QgsSymbolV2*>::iterator symbolIt = symbolList.begin();
157162
for ( ; symbolIt != symbolList.end(); ++symbolIt )
158163
{
159-
dynamic_cast<QgsMarkerSymbolV2*>( *symbolIt )->setSize( size );
164+
marker = dynamic_cast<QgsMarkerSymbolV2*>( *symbolIt );
165+
if ( marker )
166+
marker->setSize( size );
160167
}
161168
refreshSymbolView();
162169
}

src/plugins/georeferencer/qgsgeoreftransform.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -303,12 +303,14 @@ bool QgsGeorefTransform::getOriginScaleRotation( QgsPoint &origin, double &scale
303303
if ( mTransformParametrisation == Linear )
304304
{
305305
rotation = 0.0;
306-
return dynamic_cast<QgsLinearGeorefTransform *>( mGeorefTransformImplementation )->getOriginScale( origin, scaleX, scaleY );
306+
QgsLinearGeorefTransform* transform = dynamic_cast<QgsLinearGeorefTransform *>( mGeorefTransformImplementation );
307+
return transform && transform->getOriginScale( origin, scaleX, scaleY );
307308
}
308309
else if ( mTransformParametrisation == Helmert )
309310
{
310311
double scale;
311-
if ( ! dynamic_cast<QgsHelmertGeorefTransform*>( mGeorefTransformImplementation )->getOriginScaleRotation( origin, scale, rotation ) )
312+
QgsHelmertGeorefTransform* transform = dynamic_cast<QgsHelmertGeorefTransform*>( mGeorefTransformImplementation );
313+
if ( !transform || ! transform->getOriginScaleRotation( origin, scale, rotation ) )
312314
{
313315
return false;
314316
}

src/providers/ows/qgsowsdataitems.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ bool QgsOWSConnectionItem::equal( const QgsDataItem *other )
126126
return false;
127127
}
128128
const QgsOWSConnectionItem *o = dynamic_cast<const QgsOWSConnectionItem *>( other );
129-
return ( mPath == o->mPath && mName == o->mName );
129+
return ( o && mPath == o->mPath && mName == o->mName );
130130
}
131131

132132
QList<QAction*> QgsOWSConnectionItem::actions()

tests/src/core/testqgslegendrenderer.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,9 @@ void TestQgsLegendRenderer::testBigMarker()
215215
QgsMarkerSymbolV2* sym = new QgsMarkerSymbolV2();
216216
sym->setColor( Qt::red );
217217
sym->setSize( sym->size() * 6 );
218-
dynamic_cast<QgsCategorizedSymbolRendererV2*>( mVL3->rendererV2() )->updateCategorySymbol( 0, sym );
218+
QgsCategorizedSymbolRendererV2* catRenderer = dynamic_cast<QgsCategorizedSymbolRendererV2*>( mVL3->rendererV2() );
219+
QVERIFY( catRenderer );
220+
catRenderer->updateCategorySymbol( 0, sym );
219221

220222
//dynamic_cast<QgsCategorizedSymbolRendererV2*>( mVL3->rendererV2() )->updateCategoryLabel( 2, "This is a long symbol label" );
221223

@@ -231,7 +233,9 @@ void TestQgsLegendRenderer::testLongSymbolText()
231233
{
232234
QString testName = "legend_long_symbol_text";
233235

234-
dynamic_cast<QgsCategorizedSymbolRendererV2*>( mVL3->rendererV2() )->updateCategoryLabel( 1, "This is\nthree lines\nlong label" );
236+
QgsCategorizedSymbolRendererV2* catRenderer = dynamic_cast<QgsCategorizedSymbolRendererV2*>( mVL3->rendererV2() );
237+
QVERIFY( catRenderer );
238+
catRenderer->updateCategoryLabel( 1, "This is\nthree lines\nlong label" );
235239

236240
QgsLayerTreeModel legendModel( mRoot );
237241

tests/src/core/testqgsmaplayerstylemanager.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ void TestQgsMapLayerStyleManager::testStyle()
104104
void TestQgsMapLayerStyleManager::testReadWrite()
105105
{
106106
QgsSingleSymbolRendererV2* r0 = dynamic_cast<QgsSingleSymbolRendererV2*>( mVL->rendererV2() );
107+
QVERIFY( r0 );
107108
r0->symbol()->setColor( Qt::red );
108109

109110
// create and populate the manager with one more style
@@ -139,17 +140,24 @@ void TestQgsMapLayerStyleManager::testReadWrite()
139140
sm1.setCurrentStyle( QString() );
140141

141142
QgsSingleSymbolRendererV2* r2 = dynamic_cast<QgsSingleSymbolRendererV2*>( mVL->rendererV2() );
143+
QVERIFY( r2 );
142144
QCOMPARE( r2->symbol()->color(), QColor( Qt::red ) );
143145
}
144146

145147
static void _setVLColor( QgsVectorLayer* vl, const QColor& c )
146148
{
147-
dynamic_cast<QgsSingleSymbolRendererV2*>( vl->rendererV2() )->symbol()->setColor( c );
149+
QgsSingleSymbolRendererV2* renderer = dynamic_cast<QgsSingleSymbolRendererV2*>( vl->rendererV2() );
150+
if ( renderer )
151+
renderer->symbol()->setColor( c );
148152
}
149153

150154
static QColor _getVLColor( QgsVectorLayer* vl )
151155
{
152-
return dynamic_cast<QgsSingleSymbolRendererV2*>( vl->rendererV2() )->symbol()->color();
156+
QgsSingleSymbolRendererV2* renderer = dynamic_cast<QgsSingleSymbolRendererV2*>( vl->rendererV2() );
157+
if ( renderer )
158+
return renderer->symbol()->color();
159+
else
160+
return QColor();
153161
}
154162

155163
void TestQgsMapLayerStyleManager::testSwitchingStyles()

0 commit comments

Comments
 (0)