aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/JSReadableState.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-10-21 22:48:55 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-10-21 22:48:55 -0700
commit71b942b5811b8bf4aed8de043aa022ae4102623c (patch)
tree979a47af7a7f62f0dda3cb6377fe8f3a865e6e2f /src/bun.js/bindings/JSReadableState.cpp
parentcd2e9e9dcfcdb609026f9624e478b7e3af314de5 (diff)
downloadbun-71b942b5811b8bf4aed8de043aa022ae4102623c.tar.gz
bun-71b942b5811b8bf4aed8de043aa022ae4102623c.tar.zst
bun-71b942b5811b8bf4aed8de043aa022ae4102623c.zip
Fix bugs in mask boolean values
Diffstat (limited to 'src/bun.js/bindings/JSReadableState.cpp')
-rw-r--r--src/bun.js/bindings/JSReadableState.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/bun.js/bindings/JSReadableState.cpp b/src/bun.js/bindings/JSReadableState.cpp
index 309a1ea53..682e681f4 100644
--- a/src/bun.js/bindings/JSReadableState.cpp
+++ b/src/bun.js/bindings/JSReadableState.cpp
@@ -19,7 +19,11 @@ int64_t getHighWaterMark(JSC::VM& vm, JSC::JSGlobalObject* globalObject, bool is
{
auto throwScope = DECLARE_THROW_SCOPE(vm);
- if (JSValue highWaterMarkVal = options->getIfPropertyExists(globalObject, PropertyName(JSC::Identifier::fromString(vm, "highWaterMark"_s)))) {
+ // We must use getIfPropertyExists because:
+ // - it might be a getter
+ // - it might be from a super class
+ auto* clientData = WebCore::clientData(vm);
+ if (JSValue highWaterMarkVal = options->getIfPropertyExists(globalObject, clientData->builtinNames().highWaterMarkPublicName())) {
if (isDuplex && (highWaterMarkVal.isUndefined() || highWaterMarkVal.isNull())) {
highWaterMarkVal = options->getDirect(vm, JSC::Identifier::fromString(vm, "readableObjectMode"_s));
}
@@ -45,7 +49,11 @@ void JSReadableState::finishCreation(JSC::VM& vm, JSC::JSGlobalObject* globalObj
setBool(JSReadableState::Mask::objectMode, true);
}
- m_highWaterMark = getBool(JSReadableState::Mask::objectMode) ? 16 : 16 * 1024; // default value
+ m_highWaterMark = getBool(
+ JSReadableState::Mask::objectMode)
+ ? 16
+ : 16 * 1024; // default value
+
if (options != nullptr) {
int64_t customHightWaterMark = getHighWaterMark(vm, globalObject, isDuplex, options);
if (customHightWaterMark >= 0)
@@ -73,8 +81,7 @@ void JSReadableState::finishCreation(JSC::VM& vm, JSC::JSGlobalObject* globalObj
if (options == nullptr) {
m_defaultEncoding.set(vm, this, JSC::jsString(vm, WTF::String("utf8"_s)));
} else {
- JSC::JSValue defaultEncodingVal = getDirect(vm, JSC::Identifier::fromString(vm, "defaultEncoding"_s));
- if (defaultEncodingVal) {
+ if (JSC::JSValue defaultEncodingVal = getIfPropertyExists(globalObject, PropertyName(JSC::Identifier::fromString(vm, "defaultEncoding"_s)))) {
m_defaultEncoding.set(vm, this, defaultEncodingVal);
} else {
m_defaultEncoding.set(vm, this, JSC::jsString(vm, WTF::String("utf8"_s)));
@@ -88,7 +95,7 @@ void JSReadableState::finishCreation(JSC::VM& vm, JSC::JSGlobalObject* globalObj
m_encoding.set(vm, this, JSC::jsNull());
} else {
JSC::JSValue encodingVal = options->getDirect(vm, JSC::Identifier::fromString(vm, "encoding"_s));
- if (encodingVal) {
+ if (encodingVal && encodingVal.isString()) {
auto constructor = reinterpret_cast<Zig::GlobalObject*>(globalObject)->JSStringDecoder();
auto constructData = JSC::getConstructData(constructor);
MarkedArgumentBuffer args;