FTR an update to the vcpkg port is waiting in https://github.com/microsoft/vcpkg/pull/51627. But it needs an update or patch to VTK, and this isn't trivial (At least not as long as I did not replace my broken desktop PC.)
Regards, Kai > On 06/08/2026 1:16 PM CEST Roman Plöhn via gdal-dev > <[email protected]> wrote: > > > Hello, > > > in our company we since many years use GDAL (for building C++ software for > Windows only) from VCPKG. > > > The GDAL version used in the most recent VCPKG is 3.12.4#2, in which I > encounter a reproducable crash in RELEASE builds when opening a file > downloaded from a Map-Tiles server, as soon as I iterate through its layers. > > > My main question about this problem is if this problem is already fixed in a > more recent GDAL version ... if so I could send the VCPKG-maintainers a > feature request to ask them to update the GDAL package in there to a version, > where it doesn't crash anymore. > > > Below is a description of the problem. If needed I can send the file in > question. > > > For us this is a serioes issue, because it hinders us from using a recent > version of VCPKG at all (we even use the dependend lib mapnik, which needs > GDAL). > > > I really hope someone can help me ... > > > Best regards, > > > have a nice day, > > > Roman > > > > > > > > > The function I use to reproduce the crash is quite simpel: > > > auto GetLayerFeaureFIDs( OGRLayer& layer ) -> std::vector< GIntBig > > { > std::cout << "Processing layer '" << layer.GetName() << "'...\n"; > > > std::vector< GIntBig > fids; > > > OGRFeature* feature = layer.GetNextFeature(); > > > for ( ; feature != nullptr; feature = layer.GetNextFeature() ) > { > if ( nullptr == feature ) > { > std::cout << "Got a null feature from layer '" << layer.GetName() << "'. > Skipping it.\n"; > continue; > } > > > fids.push_back( feature->GetFID() ); > } > > > return fids; > } > > > It doesn't happen for each layer, i.e. in my DEBUG build, where no crash > happens, an error is reported about a thrown TopologyException: > > > Debug: GDAL: GDALOpen(C:\Projects\TestGdal\x64\Debug\43.pbf, > this=000001D7A8789410) succeeds as MVT. (code: 0) > Processing layer 'boundary'... > Processing layer 'landcover'... > Failure: TopologyException: side location conflict at 3934.7142857142858 > 3859.8571428571427. This can occur if the input geometry is invalid. (code: 1) > Processing layer 'landuse'... > Failure: TopologyException: side location conflict at 494.19230769230768 > 2796.5769230769229. This can occur if the input geometry is invalid. (code: 1) > ... > > > The crash is a Access Violation, the top of the call-stack looks like this: > > > [Inline Frame] geos.dll!geos::geom::CoordinateXY::equals2D(const > geos::geom::CoordinateXY &) Line 106 C++ > [Inline Frame] > geos.dll!geos::index::kdtree::KdTree::queryNodePoint(geos::index::kdtree::KdNode > * currentNode, const geos::geom::Coordinate & odd, bool) Line 235 C++ > geos.dll!geos::index::kdtree::KdTree::query(const geos::geom::Coordinate & > queryPt) Line 289 C++ > [Inline Frame] geos.dll!geos::noding::snapround::HotPixelIndex::find(const > geos::geom::Coordinate &) Line 146 C++ > geos.dll!geos::noding::snapround::HotPixelIndex::addRounded(const > geos::geom::CoordinateXYZM & pRound) Line 48 C++ > [Inline Frame] geos.dll!geos::noding::snapround::HotPixelIndex::add(const > geos::geom::CoordinateXYZM &) Line 90 C++ > [Inline Frame] > geos.dll!geos::noding::snapround::HotPixelIndex::addNodes::__l2::<lambda_8c47a75e4bac7a256ab75080e3e5d5f0>::operator()(const > geos::geom::CoordinateXYZM &) Line 127 C++ > geos.dll!geos::geom::CoordinateSequence::forEach<<lambda_8c47a75e4bac7a256ab75080e3e5d5f0>>(geos::noding::snapround::HotPixelIndex::addNodes::__l2::<lambda_8c47a75e4bac7a256ab75080e3e5d5f0> > && fun) Line 701 C++ > geos.dll!geos::noding::snapround::HotPixelIndex::addNodes(const > geos::geom::CoordinateSequence * pts) Line 130 C++ > geos.dll!geos::noding::snapround::SnapRoundingNoder::addIntersectionPixels(std::vector<geos::noding::SegmentString > *,std::allocator<geos::noding::SegmentString *>> & segStrings) Line 85 C++ > geos.dll!geos::noding::snapround::SnapRoundingNoder::snapRound(std::vector<geos::noding::SegmentString > *,std::allocator<geos::noding::SegmentString *>> & inputSegStrings, > std::vector<geos::noding::SegmentString > *,std::allocator<geos::noding::SegmentString *>> & resultNodedSegments) Line > 70 C++ > geos.dll!geos::operation::overlayng::EdgeNodingBuilder::node(std::vector<geos::noding::SegmentString > *,std::allocator<geos::noding::SegmentString *>> * segStrings) Line 122 C++ > geos.dll!geos::operation::overlayng::EdgeNodingBuilder::build(const > geos::geom::Geometry * geom0, const geos::geom::Geometry * geom1) Line 104 C++ > geos.dll!geos::operation::overlayng::OverlayNG::computeEdgeOverlay() Line 227 > C++ > geos.dll!geos::operation::overlayng::OverlayNG::getResult() Line 195 C++ > geos.dll!geos::operation::overlayng::OverlayNG::overlay(const > geos::geom::Geometry * geom0, const geos::geom::Geometry * geom1, int opCode, > const geos::geom::PrecisionModel * pm) Line 100 C++ > geos.dll!geos::operation::overlayng::OverlayNGRobust::overlaySR(const > geos::geom::Geometry * geom0, const geos::geom::Geometry * geom1, int opCode) > Line 295 C++ > geos.dll!geos::operation::overlayng::OverlayNGRobust::Overlay(const > geos::geom::Geometry * geom0, const geos::geom::Geometry * geom1, int opCode) > Line 147 C++ > geos.dll!geos::geom::HeuristicOverlay(const geos::geom::Geometry * g0, const > geos::geom::Geometry * g1, int opCode) Line 194 C++ > geos.dll!geos::geom::Geometry::intersection(const geos::geom::Geometry * > other) Line 616 C++ > [Inline Frame] > geos_c.dll!GEOSIntersection_r::__l2::<lambda_3988e1633fcf92bee6886158a6950fe9>::operator()() > Line 1322 C++ > geos_c.dll!execute<`anonymous > namespace'::InterruptManager,<lambda_3988e1633fcf92bee6886158a6950fe9>,0>(GEOSContextHandle_HS > * extHandle, > GEOSIntersection_r::__l2::<lambda_3988e1633fcf92bee6886158a6950fe9> && f) > Line 521 C++ > geos_c.dll!GEOSIntersection_r(GEOSContextHandle_HS * extHandle, const > geos::geom::Geometry * g1, const geos::geom::Geometry * g2) Line 1326 C++ > gdal.dll!BuildGeometryFromTwoGeoms(const OGRGeometry * poSelf, const > OGRGeometry * poOtherGeom, GEOSGeom_t *(*)(GEOSContextHandle_HS *, const > GEOSGeom_t *, const GEOSGeom_t *) pfnGEOSFunction_r) Line 3814 C++ > gdal.dll!OGRMVTLayer::GetNextRawFeature() Line 1381 C++ > [Inline Frame] > gdal.dll!OGRGetNextFeatureThroughRaw<OGRMVTLayerBase>::GetNextFeature() Line > 513 C++ > gdal.dll!OGRMVTLayerBase::GetNextFeature() Line 144 C++ > _______________________________________________ > gdal-dev mailing list > [email protected] > https://lists.osgeo.org/mailman/listinfo/gdal-dev > _______________________________________________ gdal-dev mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/gdal-dev
