diff options
author | 2023-06-28 21:45:16 -0700 | |
---|---|---|
committer | 2023-06-28 21:45:16 -0700 | |
commit | 8481f2922f4f6fe07f8b44067fe478cb1ac1706a (patch) | |
tree | 907a09dfb98c27531ca6f22b8a862fcae76dfe7c | |
parent | 68e6fe00a4be7857f474cb3aa80e0d876499e3f8 (diff) | |
download | bun-8481f2922f4f6fe07f8b44067fe478cb1ac1706a.tar.gz bun-8481f2922f4f6fe07f8b44067fe478cb1ac1706a.tar.zst bun-8481f2922f4f6fe07f8b44067fe478cb1ac1706a.zip |
Add GC test for errors
m--------- | src/bun.js/WebKit | 0 | ||||
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 8 | ||||
-rw-r--r-- | src/bun.js/javascript.zig | 4 | ||||
-rw-r--r-- | test/js/bun/util/error-gc-test.test.js | 26 |
4 files changed, 34 insertions, 4 deletions
diff --git a/src/bun.js/WebKit b/src/bun.js/WebKit -Subproject a9e3ab9b85cf911218e1d51eed8079cd955ec57 +Subproject 8a03cf746abef8a48c932ab25f8821390632f2e diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 9ff3ebf93..7ba0f0b30 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -390,7 +390,11 @@ static String computeErrorInfoWithoutPrepareStackTrace(JSC::VM& vm, Vector<Stack frame.computeLineAndColumn(thisLine, thisColumn); remappedFrames[i].position.line = thisLine; remappedFrames[i].position.column_start = thisColumn; - remappedFrames[i].source_url = Bun::toString(frame.sourceURL(vm)); + String sourceURLForFrame = frame.sourceURL(vm); + + if (!sourceURLForFrame.isEmpty()) { + remappedFrames[i].source_url = Bun::toString(sourceURLForFrame); + } // This ensures the lifetime of the sourceURL is accounted for correctly Bun__remapStackFramePositions(globalObject, remappedFrames + i, 1); @@ -409,7 +413,7 @@ static String computeErrorInfoWithoutPrepareStackTrace(JSC::VM& vm, Vector<Stack } } - sb.append(frame.sourceURL(vm)); + sb.append(sourceURLForFrame); sb.append(":"_s); sb.append(remappedFrames[i].position.line); sb.append(":"_s); diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig index 605cc0c25..572b66716 100644 --- a/src/bun.js/javascript.zig +++ b/src/bun.js/javascript.zig @@ -1933,9 +1933,9 @@ pub const VirtualMachine = struct { while (i < stack.len) : (i += 1) { const frame = stack[@intCast(usize, i)]; - const file_slice = frame.source_url.toSlice(bun.default_allocator); + const file_slice = frame.source_url.toUTF8(bun.default_allocator); defer file_slice.deinit(); - const func_slice = frame.function_name.toSlice(bun.default_allocator); + const func_slice = frame.function_name.toUTF8(bun.default_allocator); defer func_slice.deinit(); const file = file_slice.slice(); diff --git a/test/js/bun/util/error-gc-test.test.js b/test/js/bun/util/error-gc-test.test.js new file mode 100644 index 000000000..8cef55760 --- /dev/null +++ b/test/js/bun/util/error-gc-test.test.js @@ -0,0 +1,26 @@ +import { test, expect } from "bun:test"; + +test("error gc test", () => { + for (let i = 0; i < 100; i++) { + var fn = function yo() { + var err = (function innerOne() { + var err = new Error(); + for (let i = 0; i < 1000; i++) { + Bun.inspect(err); + } + Bun.gc(true); + return err; + })(); + err.stack += ""; + }; + + Object.defineProperty(fn, "name", { + value: + "yoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyoyo" + + i, + }); + + fn(); + Bun.gc(true); + } +}); |