Description
Describe the bug
Instead of an error page, I'm getting a blank page (no HTML even, just text) with the content:
TypeError: Cannot read properties of undefined (reading 'replace') at escape_html (eval at runInlinedModule (file:///C:/Users/.../node_modules/vite/dist/node/module-runner.js:1062:11), :55:26) at static_error_page (eval at runInlinedModule (file:///C:/Users/.../node_modules/vite/dist/node/module-runner.js:1062:11), :46:94) at handle_fatal_error (eval at runInlinedModule (file:///C:/Users/.../node_modules/vite/dist/node/module-runner.js:1062:11), :68:10) at async respond (eval at runInlinedModule (file:///C:/Users/.../node_modules/vite/dist/node/module-runner.js:1062:11), :336:12) at async file:///C:/Users/.../node_modules/@sveltejs/kit/src/exports/vite/dev/index.js:540:22
I've looked a bit into the functions from the stacktrace and it seems like this function is the problem:
kit/packages/kit/src/runtime/server/utils.js
Lines 99 to 116 in 217fc24
It promises to return an object that always has a string message
property, but in case of an HttpError
(first if statement in the function), this is not true. The error is defined by App.Error
, which is user-arbitrary.
Reproduction
Throw error(400, { code: 123 })
in the handle
hook. This is allowed by TypeScript if using custom error using something like this in app.d.ts
:
declare namespace App {
// ...
interface Error {
code: number
message?: string
}
}
Severity
annoyance