Skip to content

Commit cd495fb

Browse files
committed
Don't crash when findLayer is called with a nullptr
1 parent 41d6b9d commit cd495fb

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/core/layertree/qgslayertreegroup.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,9 @@ void QgsLayerTreeGroup::removeAllChildren()
193193

194194
QgsLayerTreeLayer *QgsLayerTreeGroup::findLayer( QgsMapLayer *layer ) const
195195
{
196+
if ( !layer )
197+
return nullptr;
198+
196199
return findLayer( layer->id() );
197200
}
198201

tests/src/core/testqgslayertree.cpp

+24
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class TestQgsLayerTree : public QObject
4747
void testLegendSymbolRuleBased();
4848
void testResolveReferences();
4949
void testEmbeddedGroup();
50+
void testFindLayer();
5051
void testLayerDeleted();
5152

5253
private:
@@ -589,6 +590,29 @@ void TestQgsLayerTree::testEmbeddedGroup()
589590
}
590591
}
591592

593+
void TestQgsLayerTree::testFindLayer()
594+
{
595+
//new memory layer
596+
QgsVectorLayer *vl = new QgsVectorLayer( QStringLiteral( "Point?field=col1:integer" ), QStringLiteral( "vl" ), QStringLiteral( "memory" ) );
597+
QVERIFY( vl->isValid() );
598+
599+
QgsProject project;
600+
project.addMapLayer( vl );
601+
602+
QgsLayerTree root;
603+
QgsLayerTreeModel model( &root );
604+
605+
QVERIFY( !root.findLayer( vl->id() ) );
606+
QVERIFY( !root.findLayer( nullptr ) );
607+
608+
root.addLayer( vl );
609+
610+
QCOMPARE( root.findLayer( vl->id() )->layer(), vl );
611+
QCOMPARE( root.findLayer( vl )->layer(), vl );
612+
QVERIFY( !root.findLayer( QStringLiteral( "xxx" ) ) );
613+
QVERIFY( !root.findLayer( nullptr ) );
614+
}
615+
592616
void TestQgsLayerTree::testLayerDeleted()
593617
{
594618
//new memory layer

0 commit comments

Comments
 (0)