1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-25 08:39:09 -05:00

Prevent customInspect error from crashing console (#3226)

This commit is contained in:
Kevin (Kun) "Kassimo" Qian 2019-10-28 15:29:15 -07:00 committed by Ry Dahl
parent f484776384
commit 2f0f236d56
2 changed files with 26 additions and 2 deletions

View file

@ -327,8 +327,11 @@ function createObjectString(
...args: [ConsoleContext, number, number] ...args: [ConsoleContext, number, number]
): string { ): string {
if (customInspect in value && typeof value[customInspect] === "function") { if (customInspect in value && typeof value[customInspect] === "function") {
try {
return String(value[customInspect]!()); return String(value[customInspect]!());
} else if (value instanceof Error) { } catch {}
}
if (value instanceof Error) {
return String(value.stack); return String(value.stack);
} else if (Array.isArray(value)) { } else if (Array.isArray(value)) {
return createArrayString(value, ...args); return createArrayString(value, ...args);

View file

@ -190,6 +190,27 @@ test(function consoleTestWithCustomInspector(): void {
assertEquals(stringify(new A()), "b"); assertEquals(stringify(new A()), "b");
}); });
test(function consoleTestWithCustomInspectorError(): void {
class A {
[customInspect](): string {
throw new Error("BOOM");
return "b";
}
}
assertEquals(stringify(new A()), "A {}");
class B {
constructor(public field: { a: string }) {}
[customInspect](): string {
return this.field.a;
}
}
assertEquals(stringify(new B({ a: "a" })), "a");
assertEquals(stringify(B.prototype), "{}");
});
test(function consoleTestWithIntegerFormatSpecifier(): void { test(function consoleTestWithIntegerFormatSpecifier(): void {
assertEquals(stringify("%i"), "%i"); assertEquals(stringify("%i"), "%i");
assertEquals(stringify("%i", 42.0), "42"); assertEquals(stringify("%i", 42.0), "42");