diff options
Diffstat (limited to 'Source/JavaScriptCore/API/JSStringRefCF.cpp')
-rw-r--r-- | Source/JavaScriptCore/API/JSStringRefCF.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/API/JSStringRefCF.cpp b/Source/JavaScriptCore/API/JSStringRefCF.cpp index 69cf3f8c4..fd72a593c 100644 --- a/Source/JavaScriptCore/API/JSStringRefCF.cpp +++ b/Source/JavaScriptCore/API/JSStringRefCF.cpp @@ -41,6 +41,12 @@ JSStringRef JSStringCreateWithCFString(CFStringRef string) // it can hold. (<rdar://problem/6806478>) size_t length = CFStringGetLength(string); if (length) { + Vector<LChar, 1024> lcharBuffer(length); + CFIndex usedBufferLength; + CFIndex convertedSize = CFStringGetBytes(string, CFRangeMake(0, length), kCFStringEncodingISOLatin1, 0, false, lcharBuffer.data(), length, &usedBufferLength); + if (static_cast<size_t>(convertedSize) == length && static_cast<size_t>(usedBufferLength) == length) + return OpaqueJSString::create(lcharBuffer.data(), length).leakRef(); + OwnArrayPtr<UniChar> buffer = adoptArrayPtr(new UniChar[length]); CFStringGetCharacters(string, CFRangeMake(0, length), buffer.get()); COMPILE_ASSERT(sizeof(UniChar) == sizeof(UChar), unichar_and_uchar_must_be_same_size); |