diff options
author | 2023-04-04 16:47:57 -0700 | |
---|---|---|
committer | 2023-04-04 16:47:57 -0700 | |
commit | 54d6f95f43774f92dddcbd91a669eec4a9f24d38 (patch) | |
tree | 67cd00278f8e054192c48547b642ec337f17e7c3 /src/bun.js/bindings/Process.cpp | |
parent | 76adc5be8a4f35730bbd81f06f043073e7160af8 (diff) | |
download | bun-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.cpp | 30 |
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*); |