diff options
author | zmiao <miao.zhao@mapbox.com> | 2020-04-02 13:14:49 +0300 |
---|---|---|
committer | zmiao <miao.zhao@mapbox.com> | 2020-04-03 12:32:58 +0300 |
commit | eb2ff5b9fbcbd34c61caa4abf65a5275aefff5ab (patch) | |
tree | 461ce12046acb4595427081e97c082e0ccfa7af8 | |
parent | ba23e027189f748ac6c812e9f7ab5219fe79bc6d (diff) | |
download | qtlocation-mapboxgl-eb2ff5b9fbcbd34c61caa4abf65a5275aefff5ab.tar.gz |
[build] Fix implicit conversion runtime error in core
-rw-r--r-- | platform/default/src/mbgl/util/image.cpp | 3 | ||||
-rw-r--r-- | scripts/ubsan.blacklist | 2 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_parser.cpp | 21 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_parser.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/text/tagged_string.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/util/premultiply.cpp | 6 | ||||
-rw-r--r-- | test/sprite/sprite_parser.test.cpp | 8 | ||||
-rw-r--r-- | test/storage/offline_database.test.cpp | 2 |
8 files changed, 27 insertions, 25 deletions
diff --git a/platform/default/src/mbgl/util/image.cpp b/platform/default/src/mbgl/util/image.cpp index 25063892b7..7d36dbd541 100644 --- a/platform/default/src/mbgl/util/image.cpp +++ b/platform/default/src/mbgl/util/image.cpp @@ -12,7 +12,8 @@ PremultipliedImage decodeImage(const std::string& string) { const size_t size = string.size(); if (size >= 4) { - uint32_t magic = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; + uint32_t magic = (static_cast<uint32_t>(data[0]) << 24) | (static_cast<uint32_t>(data[1]) << 16) | + (static_cast<uint32_t>(data[2]) << 8) | static_cast<uint32_t>(data[3]); if (magic == 0x89504E47U) { return decodePNG(data, size); } diff --git a/scripts/ubsan.blacklist b/scripts/ubsan.blacklist index 9934662eb2..a821cd191c 100644 --- a/scripts/ubsan.blacklist +++ b/scripts/ubsan.blacklist @@ -16,7 +16,7 @@ src:*/vendor/earcut.hpp/include/mapbox/earcut.hpp src:*/vendor/eternal/*/eternal.hpp # unsigned integer overflow -src: */vendor/*/rapidjson/include/rapidjson/reader.h +src: */vendor/mapbox-base/extras/rapidjson/include/rapidjson/reader.h # Boost bug: Implicit conversion src:*/include/boost/locale/utf.hpp diff --git a/src/mbgl/sprite/sprite_parser.cpp b/src/mbgl/sprite/sprite_parser.cpp index ac0b7f91f1..c51e5e1b57 100644 --- a/src/mbgl/sprite/sprite_parser.cpp +++ b/src/mbgl/sprite/sprite_parser.cpp @@ -17,21 +17,21 @@ namespace mbgl { std::unique_ptr<style::Image> createStyleImage(const std::string& id, const PremultipliedImage& image, - const uint32_t srcX, - const uint32_t srcY, - const uint32_t width, - const uint32_t height, + const int32_t srcX, + const int32_t srcY, + const int32_t width, + const int32_t height, const double ratio, const bool sdf, style::ImageStretches&& stretchX, style::ImageStretches&& stretchY, const optional<style::ImageContent>& content) { // Disallow invalid parameter configurations. - if (width <= 0 || height <= 0 || width > 1024 || height > 1024 || ratio <= 0 || ratio > 10 || - srcX >= image.size.width || srcY >= image.size.height || srcX + width > image.size.width || - srcY + height > image.size.height) { + if (width <= 0 || height <= 0 || width > 1024 || height > 1024 || ratio <= 0 || ratio > 10 || srcX < 0 || srcY < 0 || + srcX >= static_cast<int32_t>(image.size.width) || srcY >= static_cast<int32_t>(image.size.height) || srcX + width > static_cast<int32_t>(image.size.width) || + srcY + height > static_cast<int32_t>(image.size.height)) { Log::Error(Event::Sprite, - "Can't create image with invalid metrics: %ux%u@%u,%u in %ux%u@%sx sprite", + "Can't create image with invalid metrics: %dx%d@%d,%d in %ux%u@%sx sprite", width, height, srcX, @@ -42,10 +42,11 @@ std::unique_ptr<style::Image> createStyleImage(const std::string& id, return nullptr; } - PremultipliedImage dstImage({width, height}); + const Size size(static_cast<uint32_t>(width), static_cast<uint32_t>(height)); + PremultipliedImage dstImage(size); // Copy from the source image into our individual sprite image - PremultipliedImage::copy(image, dstImage, {srcX, srcY}, {0, 0}, {width, height}); + PremultipliedImage::copy(image, dstImage, {static_cast<uint32_t>(srcX), static_cast<uint32_t>(srcY)}, {0, 0}, size); try { return std::make_unique<style::Image>( diff --git a/src/mbgl/sprite/sprite_parser.hpp b/src/mbgl/sprite/sprite_parser.hpp index 7d545a6d98..baba427f43 100644 --- a/src/mbgl/sprite/sprite_parser.hpp +++ b/src/mbgl/sprite/sprite_parser.hpp @@ -9,10 +9,10 @@ namespace mbgl { // Extracts an individual image from a spritesheet from the given location. std::unique_ptr<style::Image> createStyleImage(const std::string& id, const PremultipliedImage&, - uint32_t srcX, - uint32_t srcY, - uint32_t srcWidth, - uint32_t srcHeight, + int32_t srcX, + int32_t srcY, + int32_t srcWidth, + int32_t srcHeight, double ratio, bool sdf, style::ImageStretches&& stretchX = {}, diff --git a/src/mbgl/text/tagged_string.cpp b/src/mbgl/text/tagged_string.cpp index b18ad4d148..9c374ae274 100644 --- a/src/mbgl/text/tagged_string.cpp +++ b/src/mbgl/text/tagged_string.cpp @@ -29,7 +29,7 @@ void TaggedString::addImageSection(const std::string& imageID) { styledText.first += *nextImageSectionCharCode; sections.emplace_back(imageID); - styledText.second.resize(styledText.first.size(), sections.size() - 1); + styledText.second.resize(styledText.first.size(), static_cast<uint8_t>(sections.size() - 1)); } optional<char16_t> TaggedString::getNextImageSectionCharCode() { diff --git a/src/mbgl/util/premultiply.cpp b/src/mbgl/util/premultiply.cpp index d9fb2480de..02c045fbb4 100644 --- a/src/mbgl/util/premultiply.cpp +++ b/src/mbgl/util/premultiply.cpp @@ -40,9 +40,9 @@ UnassociatedImage unpremultiply(PremultipliedImage&& src) { uint8_t& b = data[i + 2]; uint8_t& a = data[i + 3]; if (a) { - r = (255 * r + (a / 2)) / a; - g = (255 * g + (a / 2)) / a; - b = (255 * b + (a / 2)) / a; + r = static_cast<uint8_t>((255 * r + (a / 2)) / a); + g = static_cast<uint8_t>((255 * g + (a / 2)) / a); + b = static_cast<uint8_t>((255 * b + (a / 2)) / a); } } diff --git a/test/sprite/sprite_parser.test.cpp b/test/sprite/sprite_parser.test.cpp index 58979a0e61..db6f8fb5a8 100644 --- a/test/sprite/sprite_parser.test.cpp +++ b/test/sprite/sprite_parser.test.cpp @@ -54,7 +54,7 @@ TEST(Sprite, SpriteImageCreationInvalid) { EventSeverity::Error, Event::Sprite, int64_t(-1), - "Can't create image with invalid metrics: 4294967295x16@0,0 in 200x299@1x sprite", + "Can't create image with invalid metrics: -1x16@0,0 in 200x299@1x sprite", })); EXPECT_EQ(0u, log.uncheckedCount()); @@ -64,7 +64,7 @@ TEST(Sprite, SpriteImageCreationInvalid) { EventSeverity::Error, Event::Sprite, int64_t(-1), - "Can't create image with invalid metrics: 16x4294967295@0,0 in 200x299@1x sprite", + "Can't create image with invalid metrics: 16x-1@0,0 in 200x299@1x sprite", })); EXPECT_EQ(0u, log.uncheckedCount()); @@ -124,7 +124,7 @@ TEST(Sprite, SpriteImageCreationInvalid) { EventSeverity::Error, Event::Sprite, int64_t(-1), - "Can't create image with invalid metrics: 16x16@4294967295,0 in 200x299@1x sprite", + "Can't create image with invalid metrics: 16x16@-1,0 in 200x299@1x sprite", })); EXPECT_EQ(0u, log.uncheckedCount()); @@ -134,7 +134,7 @@ TEST(Sprite, SpriteImageCreationInvalid) { EventSeverity::Error, Event::Sprite, int64_t(-1), - "Can't create image with invalid metrics: 16x16@0,4294967295 in 200x299@1x sprite", + "Can't create image with invalid metrics: 16x16@0,-1 in 200x299@1x sprite", })); EXPECT_EQ(0u, log.uncheckedCount()); diff --git a/test/storage/offline_database.test.cpp b/test/storage/offline_database.test.cpp index 146cb33530..6b444bf3d1 100644 --- a/test/storage/offline_database.test.cpp +++ b/test/storage/offline_database.test.cpp @@ -34,7 +34,7 @@ static std::shared_ptr<std::string> randomString(size_t size) { std::mt19937 random; for (size_t i = 0; i < size; i++) { - (*result)[i] = random(); + (*result)[i] = static_cast<char>(random()); } return result; |