From fc8f19762ea350cada5fa5f24cb705a72371708c Mon Sep 17 00:00:00 2001 From: Luke Sandberg Date: Mon, 20 Oct 2025 11:30:30 -0700 Subject: [PATCH 1/2] Hook Error inspection to deobfuscate messages. --- packages/next/src/server/patch-error-inspect.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/next/src/server/patch-error-inspect.ts b/packages/next/src/server/patch-error-inspect.ts index e9a587a8b6e67..d1f18e0c9fb0b 100644 --- a/packages/next/src/server/patch-error-inspect.ts +++ b/packages/next/src/server/patch-error-inspect.ts @@ -13,6 +13,7 @@ import { parseStack, type StackFrame } from './lib/parse-stack' import { getOriginalCodeFrame } from '../next-devtools/server/shared' import { workUnitAsyncStorage } from './app-render/work-unit-async-storage.external' import { dim, italic } from '../lib/picocolors' +import { deobfuscateText } from '../shared/lib/magic-identifier' type FindSourceMapPayload = ( sourceURL: string @@ -443,11 +444,13 @@ function sourceMapError( ): Error { // Create a new Error object with the source mapping applied and then use native // Node.js formatting on the result. + // The vm may reference mangled symbols in error messages, so deobfuscate it. + const message = deobfuscateText(error.message) const newError = error.cause !== undefined ? // Setting an undefined `cause` would print `[cause]: undefined` - new Error(error.message, { cause: error.cause }) - : new Error(error.message) + new Error(message, { cause: error.cause }) + : new Error(message) // TODO: Ensure `class MyError extends Error {}` prints `MyError` as the name newError.stack = parseAndSourceMap(error, inspectOptions) From 9ae1610d0a0bd54ee5c5252f6e69338d60b0e9d4 Mon Sep 17 00:00:00 2001 From: Luke Sandberg Date: Mon, 20 Oct 2025 11:33:40 -0700 Subject: [PATCH 2/2] remove the deobfuscation in `logErrorWithOriginalStack` --- .../next/src/server/lib/router-utils/setup-dev-bundler.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/next/src/server/lib/router-utils/setup-dev-bundler.ts b/packages/next/src/server/lib/router-utils/setup-dev-bundler.ts index 986aa81f177d6..bbb4cf9519ed8 100644 --- a/packages/next/src/server/lib/router-utils/setup-dev-bundler.ts +++ b/packages/next/src/server/lib/router-utils/setup-dev-bundler.ts @@ -88,7 +88,6 @@ import { import { isParallelRouteSegment } from '../../../shared/lib/segment' import { ensureLeadingSlash } from '../../../shared/lib/page-path/ensure-leading-slash' import { Lockfile } from '../../../build/lockfile' -import { deobfuscateText } from '../../../shared/lib/magic-identifier' export type SetupOpts = { renderServer: LazyRenderServerInstance @@ -1225,9 +1224,6 @@ async function startWatcher( err: unknown, type?: 'unhandledRejection' | 'uncaughtException' | 'warning' | 'app-dir' ) { - if (err instanceof Error) { - err.message = deobfuscateText(err.message) - } if (err instanceof ModuleBuildError) { // Errors that may come from issues from the user's code Log.error(err.message)