From a7b5c1f77f719765fbd5b818affe4430cee35507 Mon Sep 17 00:00:00 2001 From: hogliux Date: Wed, 11 Apr 2018 10:47:05 +0100 Subject: [PATCH] Android: Fixed an issue where getting the metrics of a string on android could crash if the string can't be represented as a UTF-16 string --- modules/juce_graphics/native/juce_android_Fonts.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/modules/juce_graphics/native/juce_android_Fonts.cpp b/modules/juce_graphics/native/juce_android_Fonts.cpp index 992dd41427..eea53ec6d0 100644 --- a/modules/juce_graphics/native/juce_android_Fonts.cpp +++ b/modules/juce_graphics/native/juce_android_Fonts.cpp @@ -199,7 +199,7 @@ public: float getStringWidth (const String& text) override { JNIEnv* env = getEnv(); - const int numChars = text.length(); + const int numChars = CharPointer_UTF16::getBytesRequiredFor (text.getCharPointer()); jfloatArray widths = env->NewFloatArray (numChars); const int numDone = paint.callIntMethod (AndroidPaint.getTextWidths, javaString (text).get(), widths); @@ -218,12 +218,10 @@ public: void getGlyphPositions (const String& text, Array& glyphs, Array& xOffsets) override { JNIEnv* env = getEnv(); - auto jtext = javaString (text); - - const int numChars = env->GetStringLength (jtext.get()); + const int numChars = CharPointer_UTF16::getBytesRequiredFor (text.getCharPointer()); jfloatArray widths = env->NewFloatArray (numChars); - const int numDone = paint.callIntMethod (AndroidPaint.getTextWidths, jtext.get(), widths); + const int numDone = paint.callIntMethod (AndroidPaint.getTextWidths, javaString (text).get(), widths); HeapBlock localWidths (static_cast (numDone)); env->GetFloatArrayRegion (widths, 0, numDone, localWidths);