diff options
author | zmiao <miao.zhao@mapbox.com> | 2020-04-07 16:30:30 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-07 16:30:30 +0300 |
commit | bf4c7340f32c1e673e6a37b91fc65305757f52d1 (patch) | |
tree | c7871ff8901617b09d8a8d45b57334c2198b9b99 /src/mbgl/renderer | |
parent | 8986b558eb92e431c773b6033d8ae271eb71de00 (diff) | |
download | qtlocation-mapboxgl-bf4c7340f32c1e673e6a37b91fc65305757f52d1.tar.gz |
[build] Fix undefined behavour sanitizer (#16375)
* [build] Fix integer overflow runtime error for core part
Temporarily remove circle ci UBSAN build precondition
* [build] Enable all of the ubsans
[build] Check runtime error
[build] Update UBSAN_OPTION
* [build] Add UBSAN blacklist
[build] Ignore system libraries
[build] Ignore vendor library
* [build] Fix implicit conversion runtime error in core
* [build] Fix division by zero runtime error
* [build] Add unfixed error to ubsan blacklist
* [build] Make UBSAN halt on error
Revert "Temporary remove build precondition"
* [build] Fix division by zero error
* [build] Make UBSAN officially work without FIXME prefix
* [build] Fix implicit conversion from int64_t to uint64_t
* [build] Rename style test json file name
* Address review findings
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r-- | src/mbgl/renderer/layers/render_line_layer.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 8 |
2 files changed, 5 insertions, 5 deletions
diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index af5c288704..b03ac8027b 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -242,7 +242,7 @@ GeometryCollection offsetLine(const GeometryCollection& rings, double offset) { Point<double> extrude = util::unit(aToB + bToC); const double cosHalfAngle = extrude.x * bToC.x + extrude.y * bToC.y; - extrude *= (1.0 / cosHalfAngle); + extrude *= (cosHalfAngle != 0) ? (1.0 / cosHalfAngle) : 0; newRing.emplace_back(convertPoint<int16_t>(extrude * offset) + p); } 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)) { |