`RangeError: Invalid string length` when logging a particular Error with `console.error`
### Version
v26.3.1
### Platform
```text
Darwin HQX-VGM7H2WVFG 25.5.0 Darwin Kernel Version 25.5.0: Mon Apr 27 20:41:06 PDT 2026; root:xnu-12377.121.6~2/RELEASE_ARM64_T6030 arm64 arm Darwin
```
### Subsystem
util
### What steps will reproduce the bug?
1. `npm install @formatjs/icu-messageformat-parser@3.5.11`.
2. Save this script:
```javascript
try {
require('@formatjs/icu-messageformat-parser').parse(
`{0, plural, one {# ''אהבתי'''} two {# ''אהבתי'''} other {# ''אהבתי'''} }`,
{ requiresOtherClause: true, ignoreTag: true, shouldParseSkeletons: false },
);
} catch (err) {
console.error(err);
}
```
3. Run it. Observe error in the title:
```
λ node foo.js
node:internal/util/inspect:1885
tempLine += ctx.stylize(nodeModule, 'module');
^
RangeError: Invalid string length
at markNodeModules (node:internal/util/inspect:1885:21)
at formatError (node:internal/util/inspect:2019:18)
at formatRaw (node:internal/util/inspect:1362:14)
at formatValue (node:internal/util/inspect:1195:19)
at inspect (node:internal/util/inspect:409:10)
at formatWithOptionsInternal (node:internal/util/inspect:2917:40)
at formatWithOptions (node:internal/util/inspect:2779:10)
at console.value (node:internal/console/constructor:377:14)
at console.error (node:internal/console/constructor:444:61)
at Object.<anonymous> (/Users/ikerins/web/foo.js:7:11)
Node.js v26.3.1
```
I was not able to reduce the reproduction to not use the library, e.g. by manually constructing a SyntaxError with the same properties that it is producing:
https://github.com/formatjs/formatjs/blob/2093ca683a08dd8ae0226085329e9811eca38791/packages/icu-messageformat-parser/index.ts#L49-L56
I'm not sure why that doesn't work. Sorry.
### How often does it reproduce? Is there a required condition?
Always reproduces with the above script. I could not narrow it down beyond that.
### What is the expected behavior? Why is that the expected behavior?
`console.error` does not throw.
### What do you see instead?
```
λ node foo.js
node:internal/util/inspect:1885
tempLine += ctx.stylize(nodeModule, 'module');
^
RangeError: Invalid string length
at markNodeModules (node:internal/util/inspect:1885:21)
at formatError (node:internal/util/inspect:2019:18)
at formatRaw (node:internal/util/inspect:1362:14)
at formatValue (node:internal/util/inspect:1195:19)
at inspect (node:internal/util/inspect:409:10)
at formatWithOptionsInternal (node:internal/util/inspect:2917:40)
at formatWithOptions (node:internal/util/inspect:2779:10)
at console.value (node:internal/console/constructor:377:14)
at console.error (node:internal/console/constructor:444:61)
at Object.<anonymous> (/Users/ikerins/web/foo.js:7:11)
Node.js v26.3.1
```
### Additional information
The SyntaxError being logged _looks_ like this, but just constructing one with these properties directly does not reproduce, for reasons unknown. This:
```
console.log(err.message);
console.log(err.stack);
console.log(err.location);
console.log(err.originalMessage);
```
Produces:
```
EXPECT_ARGUMENT_CLOSING_BRACE
SyntaxError: EXPECT_ARGUMENT_CLOSING_BRACE
at Module.parse (/Users/ikerins/web/node_modules/@formatjs/index.ts:50:19)
at Object.<anonymous> (/Users/ikerins/web/foo.js:2:49)
at Module._compile (node:internal/modules/cjs/loader:1873:14)
at Object..js (node:internal/modules/cjs/loader:2013:10)
at Module.load (node:internal/modules/cjs/loader:1596:32)
at Module._load (node:internal/modules/cjs/loader:1398:12)
at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:154:5)
at node:internal/main/run_main_module:33:47
{
start: { offset: 57, line: 1, column: 58 },
end: { offset: 73, line: 1, column: 74 }
}
{0, plural, one {# ''אהבתי'''} two {# ''אהבתי'''} other {# ''אהבתי'''} }
```
Also, the offending `console.error` invocation hangs for a pretty long time before throwing. About 5-7s.
0 条评论