aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/JSBuffer.cpp
diff options
context:
space:
mode:
authorGravatar szatkus <szatkus@gmail.com> 2022-07-27 20:42:39 +0200
committerGravatar GitHub <noreply@github.com> 2022-07-27 11:42:39 -0700
commita00eb95e29a4ca501939a7148066b871f83bac03 (patch)
treea8e145d07041f5a025a1adefb762e2d82a618599 /src/bun.js/bindings/JSBuffer.cpp
parente468a618114998d075c6dcf7fa920004ab30e430 (diff)
downloadbun-a00eb95e29a4ca501939a7148066b871f83bac03.tar.gz
bun-a00eb95e29a4ca501939a7148066b871f83bac03.tar.zst
bun-a00eb95e29a4ca501939a7148066b871f83bac03.zip
#609 Don't truncate ascii buffers to 7-bit (#775)
Diffstat (limited to 'src/bun.js/bindings/JSBuffer.cpp')
-rw-r--r--src/bun.js/bindings/JSBuffer.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/bun.js/bindings/JSBuffer.cpp b/src/bun.js/bindings/JSBuffer.cpp
index daca67676..5b41949c4 100644
--- a/src/bun.js/bindings/JSBuffer.cpp
+++ b/src/bun.js/bindings/JSBuffer.cpp
@@ -28,6 +28,7 @@
#include "wtf/GetPtr.h"
#include "wtf/PointerPreparations.h"
#include "wtf/URL.h"
+#include "wtf/text/WTFString.h"
#include "JavaScriptCore/BuiltinNames.h"
#include "JSBufferEncodingType.h"
@@ -270,7 +271,6 @@ static inline JSC::EncodedJSValue constructBufferFromStringAndEncoding(JSC::JSGl
break;
}
- case WebCore::BufferEncodingType::latin1:
case WebCore::BufferEncodingType::ascii: {
if (view.is8Bit()) {
result = Bun__encoding__constructFromLatin1AsASCII(lexicalGlobalObject, view.characters8(), view.length());
@@ -279,6 +279,14 @@ static inline JSC::EncodedJSValue constructBufferFromStringAndEncoding(JSC::JSGl
}
break;
}
+ case WebCore::BufferEncodingType::latin1: {
+ if (view.is8Bit()) {
+ result = Bun__encoding__constructFromLatin1AsASCII(lexicalGlobalObject, view.characters8(), view.length());
+ } else {
+ result = Bun__encoding__constructFromUTF16AsASCII(lexicalGlobalObject, view.characters16(), view.length());
+ }
+ break;
+ }
case WebCore::BufferEncodingType::ucs2:
case WebCore::BufferEncodingType::utf16le: {
if (view.is8Bit()) {
@@ -1094,12 +1102,16 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_toStringBody(JSC::JS
break;
}
- case WebCore::BufferEncodingType::latin1:
case WebCore::BufferEncodingType::ascii: {
ret = Bun__encoding__toStringASCII(castedThis->typedVector() + offset, length, lexicalGlobalObject);
break;
}
+ case WebCore::BufferEncodingType::latin1: {
+ ret = JSC::JSValue::encode(JSC::jsString(vm, WTF::StringImpl::create(reinterpret_cast<const UChar*>(castedThis->typedVector() + offset), length)));
+ break;
+ }
+
case WebCore::BufferEncodingType::ucs2:
case WebCore::BufferEncodingType::utf16le: {
ret = Bun__encoding__toStringUTF16(castedThis->typedVector() + offset, length, lexicalGlobalObject);