summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzmiao <miao.zhao@mapbox.com>2020-04-02 13:14:49 +0300
committerzmiao <miao.zhao@mapbox.com>2020-04-03 12:32:58 +0300
commiteb2ff5b9fbcbd34c61caa4abf65a5275aefff5ab (patch)
tree461ce12046acb4595427081e97c082e0ccfa7af8
parentba23e027189f748ac6c812e9f7ab5219fe79bc6d (diff)
downloadqtlocation-mapboxgl-eb2ff5b9fbcbd34c61caa4abf65a5275aefff5ab.tar.gz
[build] Fix implicit conversion runtime error in core
-rw-r--r--platform/default/src/mbgl/util/image.cpp3
-rw-r--r--scripts/ubsan.blacklist2
-rw-r--r--src/mbgl/sprite/sprite_parser.cpp21
-rw-r--r--src/mbgl/sprite/sprite_parser.hpp8
-rw-r--r--src/mbgl/text/tagged_string.cpp2
-rw-r--r--src/mbgl/util/premultiply.cpp6
-rw-r--r--test/sprite/sprite_parser.test.cpp8
-rw-r--r--test/storage/offline_database.test.cpp2
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;