From 5f00e94f3e33e610f5d4a1fd39bbe4de131fd802 Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 17 Oct 2013 17:34:22 +0100 Subject: [PATCH] Fixed a string allocation problem. --- modules/juce_core/memory/juce_MemoryBlock.cpp | 2 +- modules/juce_core/streams/juce_InputStream.cpp | 3 +-- modules/juce_core/text/juce_String.cpp | 13 +++++++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/modules/juce_core/memory/juce_MemoryBlock.cpp b/modules/juce_core/memory/juce_MemoryBlock.cpp index 36cc29825e..e0a4cfbac4 100644 --- a/modules/juce_core/memory/juce_MemoryBlock.cpp +++ b/modules/juce_core/memory/juce_MemoryBlock.cpp @@ -265,7 +265,7 @@ void MemoryBlock::copyTo (void* const dst, int offset, size_t num) const noexcep String MemoryBlock::toString() const { - return String (CharPointer_UTF8 (data), size); + return String::fromUTF8 (data, size); } //============================================================================== diff --git a/modules/juce_core/streams/juce_InputStream.cpp b/modules/juce_core/streams/juce_InputStream.cpp index 162293c8d0..12c3aef43a 100644 --- a/modules/juce_core/streams/juce_InputStream.cpp +++ b/modules/juce_core/streams/juce_InputStream.cpp @@ -175,8 +175,7 @@ String InputStream::readString() } } - return String (CharPointer_UTF8 (data), - CharPointer_UTF8 (data + i)); + return String::fromUTF8 (data, i); } String InputStream::readNextLine() diff --git a/modules/juce_core/text/juce_String.cpp b/modules/juce_core/text/juce_String.cpp index 36c797abb3..f37daa3267 100644 --- a/modules/juce_core/text/juce_String.cpp +++ b/modules/juce_core/text/juce_String.cpp @@ -1897,7 +1897,7 @@ struct StringEncodingConverter return CharPointerType_Dest (reinterpret_cast (&emptyChar)); CharPointerType_Src text (source.getCharPointer()); - const size_t extraBytesNeeded = CharPointerType_Dest::getBytesRequiredFor (text); + const size_t extraBytesNeeded = CharPointerType_Dest::getBytesRequiredFor (text) + sizeof (typename CharPointerType_Dest::CharType); const size_t endOffset = (text.sizeInBytes() + 3) & ~3u; // the new string must be word-aligned or many Windows // functions will fail to read it correctly! source.preallocateBytes (endOffset + extraBytesNeeded); @@ -1993,9 +1993,14 @@ String String::fromUTF8 (const char* const buffer, int bufferSizeBytes) { if (buffer != nullptr) { - if (bufferSizeBytes < 0) return String (CharPointer_UTF8 (buffer)); - if (bufferSizeBytes > 0) return String (CharPointer_UTF8 (buffer), - CharPointer_UTF8 (buffer + bufferSizeBytes)); + if (bufferSizeBytes < 0) + return String (CharPointer_UTF8 (buffer)); + + if (bufferSizeBytes > 0) + { + jassert (CharPointer_UTF8::isValidString (buffer, bufferSizeBytes)); + return String (CharPointer_UTF8 (buffer), CharPointer_UTF8 (buffer + bufferSizeBytes)); + } } return String();