diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-03-01 17:01:22 -0800 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-03-02 11:40:42 -0800 |
commit | c461dad5eecb17d963c5dcce5db9db28e74f0429 (patch) | |
tree | ec16ed8197489e71f670fbb1ade7186a2262cd37 /platform/default | |
parent | 0c3521d46caeac7ba6c27840f883b4cd3b612316 (diff) | |
download | qtlocation-mapboxgl-c461dad5eecb17d963c5dcce5db9db28e74f0429.tar.gz |
[core] Safeguard ICU UChar usage
Diffstat (limited to 'platform/default')
-rw-r--r-- | platform/default/bidi.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/platform/default/bidi.cpp b/platform/default/bidi.cpp index 08a02ee60f..d9ed2658ef 100644 --- a/platform/default/bidi.cpp +++ b/platform/default/bidi.cpp @@ -1,9 +1,11 @@ -#include <memory> - #include <mbgl/text/bidi.hpp> +#include <mbgl/util/traits.hpp> + #include <unicode/ubidi.h> #include <unicode/ushape.h> +#include <memory> + namespace mbgl { class BiDiImpl { @@ -28,7 +30,7 @@ std::u16string applyArabicShaping(const std::u16string& input) { UErrorCode errorCode = U_ZERO_ERROR; const int32_t outputLength = - u_shapeArabic(input.c_str(), static_cast<int32_t>(input.size()), NULL, 0, + u_shapeArabic(mbgl::utf16char_cast<const UChar*>(input.c_str()), static_cast<int32_t>(input.size()), NULL, 0, (U_SHAPE_LETTERS_SHAPE & U_SHAPE_LETTERS_MASK) | (U_SHAPE_TEXT_DIRECTION_LOGICAL & U_SHAPE_TEXT_DIRECTION_MASK), &errorCode); @@ -38,7 +40,7 @@ std::u16string applyArabicShaping(const std::u16string& input) { std::u16string outputText(outputLength, 0); - u_shapeArabic(input.c_str(), static_cast<int32_t>(input.size()), &outputText[0], outputLength, + u_shapeArabic(mbgl::utf16char_cast<const UChar*>(input.c_str()), static_cast<int32_t>(input.size()), mbgl::utf16char_cast<UChar*>(&outputText[0]), outputLength, (U_SHAPE_LETTERS_SHAPE & U_SHAPE_LETTERS_MASK) | (U_SHAPE_TEXT_DIRECTION_LOGICAL & U_SHAPE_TEXT_DIRECTION_MASK), &errorCode); @@ -89,7 +91,7 @@ std::vector<std::u16string> BiDi::processText(const std::u16string& input, std::set<std::size_t> lineBreakPoints) { UErrorCode errorCode = U_ZERO_ERROR; - ubidi_setPara(impl->bidiText, input.c_str(), static_cast<int32_t>(input.size()), + ubidi_setPara(impl->bidiText, mbgl::utf16char_cast<const UChar*>(input.c_str()), static_cast<int32_t>(input.size()), UBIDI_DEFAULT_LTR, NULL, &errorCode); if (U_FAILURE(errorCode)) { |