From d83710ebaaf1e89a23fbf263ab3c13801ad8ae42 Mon Sep 17 00:00:00 2001 From: robobun <117481402+robobun@users.noreply.github.com> Date: Tue, 12 May 2026 21:59:41 +0000 Subject: [PATCH] fix segfault inspecting JSX with circular props --- src/jsc/ConsoleObject.zig | 2 +- test/js/bun/util/inspect.test.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/jsc/ConsoleObject.zig b/src/jsc/ConsoleObject.zig index 2489ea14ea03..185f7dad814d 100644 --- a/src/jsc/ConsoleObject.zig +++ b/src/jsc/ConsoleObject.zig @@ -1136,7 +1136,7 @@ pub const Formatter = struct { pub fn canHaveCircularReferences(tag: Tag) bool { return switch (tag) { - .Function, .Array, .Object, .Map, .Set, .Error, .Class, .Event => true, + .Function, .Array, .Object, .Map, .Set, .Error, .Class, .Event, .JSX => true, else => false, }; } diff --git a/test/js/bun/util/inspect.test.js b/test/js/bun/util/inspect.test.js index 32a70af30183..0209f3356200 100644 --- a/test/js/bun/util/inspect.test.js +++ b/test/js/bun/util/inspect.test.js @@ -316,6 +316,20 @@ it("jsx with fragment", () => { expect(input).toBe(output); }); +it("jsx with circular props does not crash", () => { + const el = Bun.markdown.react("hello"); + el.props = el; + const out = Bun.inspect(el); + expect(out).toContain("[Circular]"); +}); + +it("jsx with circular children does not crash", () => { + const el = Bun.markdown.react("hello"); + el.props.children = el; + const out = Bun.inspect(el); + expect(out).toContain("[Circular]"); +}); + it("inspect", () => { expect(Bun.inspect(new TypeError("what")).includes("TypeError: what")).toBe(true); expect(Bun.inspect("hi")).toBe('"hi"');