diff options
author | zmiao <miao.zhao@mapbox.com> | 2020-03-25 17:30:39 +0200 |
---|---|---|
committer | zmiao <miao.zhao@mapbox.com> | 2020-04-03 12:32:24 +0300 |
commit | 93f2cd6704e0d9ca65d08e7d3efba84f5a5e16a4 (patch) | |
tree | fc15cbff15f4f5f761ec86b7d22aaf082ec9c273 | |
parent | 338cfd1b33dfe26b9402d79cc64609b944a9f1d1 (diff) | |
download | qtlocation-mapboxgl-93f2cd6704e0d9ca65d08e7d3efba84f5a5e16a4.tar.gz |
[build] Fix integer overflow runtime error for core part
Temporarily remove circle ci UBSAN build precondition
-rw-r--r-- | circle.yml | 2 | ||||
-rw-r--r-- | platform/default/src/mbgl/storage/offline_database.cpp | 11 | ||||
-rw-r--r-- | src/mbgl/geometry/line_atlas.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/map/transform_state.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/tile/raster_dem_tile.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/util/tiny_sdf.cpp | 2 |
8 files changed, 23 insertions, 18 deletions
diff --git a/circle.yml b/circle.yml index 9ef9939778..880383a386 100644 --- a/circle.yml +++ b/circle.yml @@ -117,8 +117,6 @@ workflows: name: FIXME-linux-ubsan executor_name: ubuntu-disco target_is_linux: true - requires: - - sanity-checks config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DMBGL_WITH_SANITIZER=undefined' test_params: '|| true' style_tests: true diff --git a/platform/default/src/mbgl/storage/offline_database.cpp b/platform/default/src/mbgl/storage/offline_database.cpp index ff283ed105..084b990529 100644 --- a/platform/default/src/mbgl/storage/offline_database.cpp +++ b/platform/default/src/mbgl/storage/offline_database.cpp @@ -1275,7 +1275,8 @@ bool OfflineDatabase::evict(uint64_t neededFreeSize, DatabaseSizeChangeStats& st const uint64_t tileChanges = tileQuery.changes(); // Update current ambient cache size, based on how many bytes were released. - newAmbientCacheSize = std::max<int64_t>(newAmbientCacheSize - stats.bytesReleased(), 0u); + newAmbientCacheSize = std::max<int64_t>( + static_cast<int64_t>(newAmbientCacheSize) - static_cast<int64_t>(stats.bytesReleased()), 0u); // The cached value of offlineTileCount does not need to be updated // here because only non-offline tiles can be removed by eviction. @@ -1465,9 +1466,9 @@ uint64_t OfflineDatabase::DatabaseSizeChangeStats::pageSize() const { } int64_t OfflineDatabase::DatabaseSizeChangeStats::diff() const { - const uint64_t currentSize = - pageSize_ * (db->getPragma<int64_t>("PRAGMA page_count") - db->getPragma<int64_t>("PRAGMA freelist_count")); - return currentSize - initialSize_; + const int64_t currentSize = static_cast<int64_t>(pageSize_) * (db->getPragma<int64_t>("PRAGMA page_count") - + db->getPragma<int64_t>("PRAGMA freelist_count")); + return currentSize - static_cast<int64_t>(initialSize_); } uint64_t OfflineDatabase::DatabaseSizeChangeStats::bytesReleased() const { @@ -1478,7 +1479,7 @@ uint64_t OfflineDatabase::DatabaseSizeChangeStats::bytesReleased() const { void OfflineDatabase::updateAmbientCacheSize(DatabaseSizeChangeStats& stats) { assert(currentAmbientCacheSize); if (currentAmbientCacheSize) { - *currentAmbientCacheSize = std::max<int64_t>(*currentAmbientCacheSize + stats.diff(), 0u); + *currentAmbientCacheSize = std::max<int64_t>(static_cast<int64_t>(*currentAmbientCacheSize) + stats.diff(), 0u); } } diff --git a/src/mbgl/geometry/line_atlas.cpp b/src/mbgl/geometry/line_atlas.cpp index 6ddf16af0b..0739d18685 100644 --- a/src/mbgl/geometry/line_atlas.cpp +++ b/src/mbgl/geometry/line_atlas.cpp @@ -54,7 +54,7 @@ void addRoundDash( if (ranges.empty()) return; for (int y = -n; y <= n; y++) { - int row = yOffset + n + y; + int row = static_cast<int32_t>(yOffset) + n + y; const uint32_t index = image.size.width * row; uint32_t currIndex = 0; DashRange range = ranges[currIndex]; diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp index 0a1c3c4fbd..f16f310a06 100644 --- a/src/mbgl/layout/symbol_layout.cpp +++ b/src/mbgl/layout/symbol_layout.cpp @@ -738,10 +738,12 @@ std::vector<float> SymbolLayout::calculateTileDistances(const GeometryCoordinate sumForwardLength += util::dist<float>(line[i + 1], line[i]); } } - for (std::size_t i = ++segment; i-- > 0;) { + for (std::size_t i = segment;; --i) { tileDistances[i] = sumBackwardLength; if (i != 0u) { sumBackwardLength += util::dist<float>(line[i - 1], line[i]); + } else { + break; } } } diff --git a/src/mbgl/map/transform_state.cpp b/src/mbgl/map/transform_state.cpp index b5513f3d83..16d052adc8 100644 --- a/src/mbgl/map/transform_state.cpp +++ b/src/mbgl/map/transform_state.cpp @@ -70,8 +70,11 @@ void TransformState::matrixFor(mat4& matrix, const UnwrappedTileID& tileID) cons const double s = Projection::worldSize(scale) / tileScale; matrix::identity(matrix); - matrix::translate( - matrix, matrix, int64_t(tileID.canonical.x + tileID.wrap * tileScale) * s, int64_t(tileID.canonical.y) * s, 0); + matrix::translate(matrix, + matrix, + int64_t(tileID.canonical.x + tileID.wrap * static_cast<int64_t>(tileScale)) * s, + int64_t(tileID.canonical.y) * s, + 0); matrix::scale(matrix, matrix, s / util::EXTENT, s / util::EXTENT, 1); } diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index cdb85385ed..aeba4b5eec 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -108,8 +108,8 @@ void Renderer::Impl::render(const RenderTree& renderTree) { } parameters.staticData.depthRenderbuffer->setShouldClear(true); - uint32_t i = static_cast<uint32_t>(layerRenderItems.size()) - 1; - for (auto it = layerRenderItems.begin(); it != layerRenderItems.end(); ++it, --i) { + int32_t i = static_cast<int32_t>(layerRenderItems.size()) - 1; + for (auto it = layerRenderItems.begin(); it != layerRenderItems.end() && i >= 0; ++it, --i) { parameters.currentLayer = i; const RenderItem& renderItem = it->get(); if (renderItem.hasRenderPass(parameters.pass)) { @@ -159,8 +159,8 @@ void Renderer::Impl::render(const RenderTree& renderTree) { parameters.pass = RenderPass::Translucent; const auto debugGroup(parameters.renderPass->createDebugGroup("translucent")); - uint32_t i = static_cast<uint32_t>(layerRenderItems.size()) - 1; - for (auto it = layerRenderItems.begin(); it != layerRenderItems.end(); ++it, --i) { + int32_t i = static_cast<int32_t>(layerRenderItems.size()) - 1; + for (auto it = layerRenderItems.begin(); it != layerRenderItems.end() && i >= 0; ++it, --i) { parameters.currentLayer = i; const RenderItem& renderItem = it->get(); if (renderItem.hasRenderPass(parameters.pass)) { diff --git a/src/mbgl/tile/raster_dem_tile.cpp b/src/mbgl/tile/raster_dem_tile.cpp index e3c8eed829..b70e581ea1 100644 --- a/src/mbgl/tile/raster_dem_tile.cpp +++ b/src/mbgl/tile/raster_dem_tile.cpp @@ -84,8 +84,9 @@ HillshadeBucket* RasterDEMTile::getBucket() const { } void RasterDEMTile::backfillBorder(const RasterDEMTile& borderTile, const DEMTileNeighbors mask) { - int32_t dx = borderTile.id.canonical.x - id.canonical.x; - const int8_t dy = borderTile.id.canonical.y - id.canonical.y; + int32_t dx = static_cast<int32_t>(borderTile.id.canonical.x) - static_cast<int32_t>(id.canonical.x); + const auto dy = + static_cast<int8_t>(static_cast<int32_t>(borderTile.id.canonical.y) - static_cast<int32_t>(id.canonical.y)); const uint32_t dim = pow(2, id.canonical.z); if (dx == 0 && dy == 0) return; if (std::abs(dy) > 1) return; diff --git a/src/mbgl/util/tiny_sdf.cpp b/src/mbgl/util/tiny_sdf.cpp index 6edcd83bc2..a71d04386f 100644 --- a/src/mbgl/util/tiny_sdf.cpp +++ b/src/mbgl/util/tiny_sdf.cpp @@ -35,7 +35,7 @@ void edt1d(std::vector<double>& f, for (uint32_t q = 0, k = 0; q < n; q++) { while (z[k + 1] < q) k++; - d[q] = (q - v[k]) * (q - v[k]) + f[v[k]]; + d[q] = (static_cast<double>(q) - v[k]) * (static_cast<double>(q) - v[k]) + f[v[k]]; } } |