From 47925e03ec32a8603187c651144c4fd10663047c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 18 Nov 2020 04:43:22 +0000 Subject: [PATCH] Fix tessellator crash with 2d triangle again --- src/core/qgstessellator.cpp | 7 +++++-- tests/src/3d/testqgstessellator.cpp | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/core/qgstessellator.cpp b/src/core/qgstessellator.cpp index f73d50d1d0a2..0768e027a362 100644 --- a/src/core/qgstessellator.cpp +++ b/src/core/qgstessellator.cpp @@ -604,7 +604,7 @@ void QgsTessellator::addPolygon( const QgsPolygon &polygon, float extrusionHeigh const double *zData = !mNoZ ? exterior->zData() : nullptr; for ( int i = 0; i < 3; i++ ) { - float z = mNoZ ? 0 : *zData; + float z = !zData ? 0 : *zData; if ( z < zMin ) zMin = z; if ( z > zMax ) @@ -626,7 +626,10 @@ void QgsTessellator::addPolygon( const QgsPolygon &polygon, float extrusionHeigh } mData << p.first << p.second; } - xData++; yData++; zData++; + xData++; yData++; + // zData can be nullptr if mNoZ or triangle is 2D + if ( zData ) + zData++; } if ( mAddBackFaces ) diff --git a/tests/src/3d/testqgstessellator.cpp b/tests/src/3d/testqgstessellator.cpp index 22af764be47f..4e35bc828184 100644 --- a/tests/src/3d/testqgstessellator.cpp +++ b/tests/src/3d/testqgstessellator.cpp @@ -406,7 +406,8 @@ void TestQgsTessellator::testCrash2DTriangle() // test tessellation of a 2D triangle - https://github.com/qgis/QGIS/issues/36024 QgsPolygon polygon; polygon.fromWkt( "Polygon((0 0, 42 0, 42 42, 0 0))" ); - QgsTessellator t( 0, 0, true, false, false, true ); + // must not be declared with mNoz = true + QgsTessellator t( 0, 0, true ); t.addPolygon( polygon, 0 ); // must not crash - that's all we test here }