From e0131f1edae0fc411bf8abb2fed211ca07af60fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Best?= Date: Thu, 13 Feb 2025 13:02:55 +0100 Subject: [PATCH] fix(devtools): Handle nullish values passed to `formatConsoleArguments` (#32372) ## Summary When using React Devtools, calling `console.log('%s', null)` in userland can cause it to throw an error: ``` TypeError: Cannot read properties of null (reading 'toString') ``` ## How did you test this change? Added a unit test. See https://github.com/47ng/nuqs/issues/808. --- .../react-devtools-shared/src/__tests__/utils-test.js | 9 +++++++++ .../src/backend/utils/formatConsoleArguments.js | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/react-devtools-shared/src/__tests__/utils-test.js b/packages/react-devtools-shared/src/__tests__/utils-test.js index 94726312c3bfa..876aaa99f1ea9 100644 --- a/packages/react-devtools-shared/src/__tests__/utils-test.js +++ b/packages/react-devtools-shared/src/__tests__/utils-test.js @@ -470,5 +470,14 @@ function f() { } {}, ]); }); + + it('formats nullish values', () => { + expect(formatConsoleArguments('This is the %s template', null)).toEqual([ + 'This is the null template', + ]); + expect( + formatConsoleArguments('This is the %s template', undefined), + ).toEqual(['This is the undefined template']); + }); }); }); diff --git a/packages/react-devtools-shared/src/backend/utils/formatConsoleArguments.js b/packages/react-devtools-shared/src/backend/utils/formatConsoleArguments.js index a2d303e543ac0..eaf4170970ed4 100644 --- a/packages/react-devtools-shared/src/backend/utils/formatConsoleArguments.js +++ b/packages/react-devtools-shared/src/backend/utils/formatConsoleArguments.js @@ -58,7 +58,7 @@ export default function formatConsoleArguments( } case 's': { const [arg] = args.splice(argumentsPointer, 1); - template += arg.toString(); + template += String(arg); break; }