Ignore:
Timestamp:
Jan 17, 2014, 12:16:50 AM (11 years ago)
Author:
[email protected]
Message:

Unreviewed, rolling out r162185, r162186, and r162187.
http://trac.webkit.org/changeset/162185
http://trac.webkit.org/changeset/162186
http://trac.webkit.org/changeset/162187
https://bugs.webkit.org/show_bug.cgi?id=127164

Broke JSStringCreateWithCharactersNoCopy, as evidenced by a
JSC API test (Requested by ap on #webkit).

  • API/JSStringRef.cpp:

(JSStringGetCharactersPtr):
(JSStringGetUTF8CString):
(JSStringIsEqual):

  • API/JSStringRefCF.cpp:

(JSStringCreateWithCFString):
(JSStringCopyCFString):

  • API/OpaqueJSString.cpp:

(OpaqueJSString::create):
(OpaqueJSString::identifier):

  • API/OpaqueJSString.h:

(OpaqueJSString::create):
(OpaqueJSString::characters):
(OpaqueJSString::deprecatedCharacters):
(OpaqueJSString::OpaqueJSString):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/API/JSStringRefCF.cpp

    r162185 r162192  
    4141    // it can hold.  (<rdar://problem/6806478>)
    4242    size_t length = CFStringGetLength(string);
    43     if (!length)
    44         return OpaqueJSString::create(reinterpret_cast<const LChar*>(""), 0).leakRef();
     43    if (length) {
     44        Vector<LChar, 1024> lcharBuffer(length);
     45        CFIndex usedBufferLength;
     46        CFIndex convertedSize = CFStringGetBytes(string, CFRangeMake(0, length), kCFStringEncodingISOLatin1, 0, false, lcharBuffer.data(), length, &usedBufferLength);
     47        if (static_cast<size_t>(convertedSize) == length && static_cast<size_t>(usedBufferLength) == length)
     48            return OpaqueJSString::create(lcharBuffer.data(), length).leakRef();
    4549
    46     Vector<LChar, 1024> lcharBuffer(length);
    47     CFIndex usedBufferLength;
    48     CFIndex convertedSize = CFStringGetBytes(string, CFRangeMake(0, length), kCFStringEncodingISOLatin1, 0, false, lcharBuffer.data(), length, &usedBufferLength);
    49     if (static_cast<size_t>(convertedSize) == length && static_cast<size_t>(usedBufferLength) == length)
    50         return OpaqueJSString::create(lcharBuffer.data(), length).leakRef();
    51 
    52     auto buffer = std::make_unique<UniChar[]>(length);
    53     CFStringGetCharacters(string, CFRangeMake(0, length), buffer.get());
    54     static_assert(sizeof(UniChar) == sizeof(UChar), "UniChar and UChar must be same size");
    55     return OpaqueJSString::create(reinterpret_cast<UChar*>(buffer.get()), length).leakRef();
     50        auto buffer = std::make_unique<UniChar[]>(length);
     51        CFStringGetCharacters(string, CFRangeMake(0, length), buffer.get());
     52        COMPILE_ASSERT(sizeof(UniChar) == sizeof(UChar), unichar_and_uchar_must_be_same_size);
     53        return OpaqueJSString::create(reinterpret_cast<UChar*>(buffer.get()), length).leakRef();
     54    }
     55   
     56    return OpaqueJSString::create(reinterpret_cast<const LChar*>(""), 0).leakRef();
    5657}
    5758
    58 CFStringRef JSStringCopyCFString(CFAllocatorRef allocator, JSStringRef string)
     59CFStringRef JSStringCopyCFString(CFAllocatorRef alloc, JSStringRef string)
    5960{
    6061    if (!string->length())
    6162        return CFSTR("");
    6263
    63     if (string->is8Bit())
    64         return CFStringCreateWithBytes(allocator, reinterpret_cast<const UInt8*>(string->characters8()), string->length(), kCFStringEncodingISOLatin1, false);
    65 
    66     return CFStringCreateWithCharacters(allocator, reinterpret_cast<const UniChar*>(string->characters16()), string->length());
     64    return CFStringCreateWithCharacters(alloc, reinterpret_cast<const UniChar*>(string->deprecatedCharacters()), string->length());
    6765}
Note: See TracChangeset for help on using the changeset viewer.