diff options
author | 2022-08-03 21:11:20 -0700 | |
---|---|---|
committer | 2022-08-03 21:11:20 -0700 | |
commit | b310d7c40df5bc574f2879e5cf4dca973df47d2d (patch) | |
tree | e29997c57b3c63c8c057d67d8ccfea671eaafc26 /src | |
parent | 290fb7f7e721d0ed39a4e360e92f121cad6ca680 (diff) | |
download | bun-b310d7c40df5bc574f2879e5cf4dca973df47d2d.tar.gz bun-b310d7c40df5bc574f2879e5cf4dca973df47d2d.tar.zst bun-b310d7c40df5bc574f2879e5cf4dca973df47d2d.zip |
[node.js compat] latin1 & ascii encoding for `Buffer`
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/bindings/JSBuffer.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/bun.js/bindings/JSBuffer.cpp b/src/bun.js/bindings/JSBuffer.cpp index 570d5f73e..7cbd1faac 100644 --- a/src/bun.js/bindings/JSBuffer.cpp +++ b/src/bun.js/bindings/JSBuffer.cpp @@ -201,13 +201,13 @@ static inline JSC::EncodedJSValue jsBufferConstructorFunction_allocUnsafeBody(JS RELEASE_AND_RETURN(throwScope, JSBuffer__bufferFromLength(lexicalGlobalObject, length)); } -EncodedJSValue JSBuffer__bufferFromPointerAndLength(JSC::JSGlobalObject* lexicalGlobalObject, char* ptr, unsigned int length) +EncodedJSValue JSBuffer__bufferFromPointerAndLength(JSC::JSGlobalObject* lexicalGlobalObject, const unsigned char* ptr, unsigned int length) { JSC::JSUint8Array* uint8Array; if (LIKELY(length > 0)) { - auto buffer = ArrayBuffer::createFromBytes(ptr, length, nullptr); + auto buffer = ArrayBuffer::create(ptr, length); uint8Array = JSC::JSUint8Array::create(lexicalGlobalObject, lexicalGlobalObject->typedArrayStructure(JSC::TypeUint8), WTFMove(buffer), 0, length); } else { @@ -273,7 +273,8 @@ static inline JSC::EncodedJSValue constructBufferFromStringAndEncoding(JSC::JSGl case WebCore::BufferEncodingType::ascii: { if (view.is8Bit()) { - result = Bun__encoding__constructFromLatin1AsASCII(lexicalGlobalObject, view.characters8(), view.length()); + // ascii is a noop for latin1 + result = JSBuffer__bufferFromPointerAndLength(lexicalGlobalObject, view.characters8(), view.length()); } else { result = Bun__encoding__constructFromUTF16AsASCII(lexicalGlobalObject, view.characters16(), view.length()); } @@ -281,7 +282,9 @@ static inline JSC::EncodedJSValue constructBufferFromStringAndEncoding(JSC::JSGl } case WebCore::BufferEncodingType::latin1: { if (view.is8Bit()) { - result = Bun__encoding__constructFromLatin1AsASCII(lexicalGlobalObject, view.characters8(), view.length()); + // The native encoding is latin1 + // so we don't need to do any conversion. + result = JSBuffer__bufferFromPointerAndLength(lexicalGlobalObject, view.characters8(), view.length()); } else { result = Bun__encoding__constructFromUTF16AsASCII(lexicalGlobalObject, view.characters16(), view.length()); } @@ -292,7 +295,9 @@ static inline JSC::EncodedJSValue constructBufferFromStringAndEncoding(JSC::JSGl if (view.is8Bit()) { result = Bun__encoding__constructFromLatin1AsUTF16(lexicalGlobalObject, view.characters8(), view.length()); } else { - result = Bun__encoding__constructFromUTF16AsUTF16(lexicalGlobalObject, view.characters16(), view.length()); + // The native encoding is UTF-16 + // so we don't need to do any conversion. + result = JSBuffer__bufferFromPointerAndLength(lexicalGlobalObject, reinterpret_cast<const unsigned char*>(view.characters16()), view.length() * 2); } break; } |