aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/Process.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-04-04 16:47:57 -0700
committerGravatar GitHub <noreply@github.com> 2023-04-04 16:47:57 -0700
commit54d6f95f43774f92dddcbd91a669eec4a9f24d38 (patch)
tree67cd00278f8e054192c48547b642ec337f17e7c3 /src/bun.js/bindings/Process.cpp
parent76adc5be8a4f35730bbd81f06f043073e7160af8 (diff)
downloadbun-54d6f95f43774f92dddcbd91a669eec4a9f24d38.tar.gz
bun-54d6f95f43774f92dddcbd91a669eec4a9f24d38.tar.zst
bun-54d6f95f43774f92dddcbd91a669eec4a9f24d38.zip
Dylan/fix some failing tests (#2544)
* handle `umask()` invalid arguments * move `bktree-fast` to test root, fix postinstall * fix fs test * could be baseline * handle different timezones * accidentally deleted tests * fix hang in `AbortSignal.timeout` * bring abort tests back * Revert "bring abort tests back" This reverts commit 0ff2ad5bf408694ac719b8ba0a38b16070e10201. * bunx node-gyp * bun x * fix typecheck * test * Update inspect.test.js --------- Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
Diffstat (limited to 'src/bun.js/bindings/Process.cpp')
-rw-r--r--src/bun.js/bindings/Process.cpp30
1 files changed, 26 insertions, 4 deletions
diff --git a/src/bun.js/bindings/Process.cpp b/src/bun.js/bindings/Process.cpp
index 6be74ec6d..ed7992b41 100644
--- a/src/bun.js/bindings/Process.cpp
+++ b/src/bun.js/bindings/Process.cpp
@@ -284,16 +284,38 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionDlopen,
JSC_DEFINE_HOST_FUNCTION(Process_functionUmask,
(JSC::JSGlobalObject * globalObject, JSC::CallFrame* callFrame))
{
- if (callFrame->argumentCount() == 0) {
- return JSC::JSValue::encode(JSC::jsNumber(umask(0)));
+ if (callFrame->argumentCount() == 0 || callFrame->argument(0).isUndefined()) {
+ mode_t currentMask = umask(0);
+ umask(currentMask);
+ return JSC::JSValue::encode(JSC::jsNumber(currentMask));
}
auto& vm = globalObject->vm();
auto throwScope = DECLARE_THROW_SCOPE(vm);
- int umaskValue = callFrame->argument(0).toInt32(globalObject);
+ JSValue numberValue = callFrame->argument(0);
+
+ if (!numberValue.isNumber()) {
+ throwTypeError(globalObject, throwScope, "The \"mask\" argument must be a number"_s);
+ return JSValue::encode({});
+ }
+
+ if (!numberValue.isAnyInt()) {
+ throwRangeError(globalObject, throwScope, "The \"mask\" argument must be an integer"_s);
+ return JSValue::encode({});
+ }
+
+ double number = numberValue.toNumber(globalObject);
+ int64_t newUmask = isInt52(number) ? tryConvertToInt52(number) : numberValue.toInt32(globalObject);
RETURN_IF_EXCEPTION(throwScope, JSC::JSValue::encode(JSC::JSValue {}));
+ if (newUmask < 0 || newUmask > 4294967295) {
+ StringBuilder messageBuilder;
+ messageBuilder.append("The \"mask\" value must be in range [0, 4294967295]. Received value: "_s);
+ messageBuilder.append(int52ToString(vm, newUmask, 10)->getString(globalObject));
+ throwRangeError(globalObject, throwScope, messageBuilder.toString());
+ return JSValue::encode({});
+ }
- return JSC::JSValue::encode(JSC::jsNumber(umask(umaskValue)));
+ return JSC::JSValue::encode(JSC::jsNumber(umask(newUmask)));
}
extern "C" uint64_t Bun__readOriginTimer(void*);