From fecb13af88ffda32ef2ba65a91d902e77801407f Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 23 Feb 2024 18:33:07 +0100 Subject: [PATCH] PMTiles: fix 'Non increasing tile_id' error when opening some files (fixes #9288) --- .../ogr/data/pmtiles/subset7_truncated.pmtiles | Bin 0 -> 30000 bytes autotest/ogr/ogr_pmtiles.py | 12 ++++++++++++ ogr/ogrsf_frmts/pmtiles/ogr_pmtiles.h | 4 +++- .../pmtiles/ogrpmtilestileiterator.cpp | 5 +++-- 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 autotest/ogr/data/pmtiles/subset7_truncated.pmtiles diff --git a/autotest/ogr/data/pmtiles/subset7_truncated.pmtiles b/autotest/ogr/data/pmtiles/subset7_truncated.pmtiles new file mode 100644 index 0000000000000000000000000000000000000000..44057c2036e3226f0a999d2ad749f888c756ede4 GIT binary patch literal 30000 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::max(); + uint64_t m_nLastTileId = INVALID_LAST_TILE_ID; // Computed values from zoom leven and min/max x/y uint64_t m_nMinTileId = std::numeric_limits::max(); diff --git a/ogr/ogrsf_frmts/pmtiles/ogrpmtilestileiterator.cpp b/ogr/ogrsf_frmts/pmtiles/ogrpmtilestileiterator.cpp index 674f685e6f62..25e40f4dedce 100644 --- a/ogr/ogrsf_frmts/pmtiles/ogrpmtilestileiterator.cpp +++ b/ogr/ogrsf_frmts/pmtiles/ogrpmtilestileiterator.cpp @@ -250,7 +250,7 @@ pmtiles::entry_zxy OGRPMTilesTileIterator::GetNextTile(uint32_t *pnRunLength) static_cast(m_nZoomLevel), m_nCurX, m_nCurY); m_nMaxTileId = m_nMinTileId; - m_nLastTileId = 0; + m_nLastTileId = INVALID_LAST_TILE_ID; while (m_aoStack.size() > 1) m_aoStack.pop(); const int nMinEntryIdx = find_tile_idx_lesser_or_equal( @@ -323,7 +323,8 @@ pmtiles::entry_zxy OGRPMTilesTileIterator::GetNextTile(uint32_t *pnRunLength) break; } - if (sContext.sEntries[0].tile_id <= m_nLastTileId) + if (m_nLastTileId != INVALID_LAST_TILE_ID && + sContext.sEntries[0].tile_id <= m_nLastTileId) { CPLError(CE_Failure, CPLE_AppDefined, "Non increasing tile_id");