Skip to content

TypeError: Cannot read properties of undefined (reading 'replace') at escape_html #13951

Open
@rChaoz

Description

@rChaoz

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:

export async function handle_error_and_jsonify(event, options, error) {
if (error instanceof HttpError) {
return error.body;
}
if (__SVELTEKIT_DEV__ && typeof error == 'object') {
fix_stack_trace(error);
}
const status = get_status(error);
const message = get_message(error);
return (
(await with_event(event, () =>
options.hooks.handleError({ error, event, status, message })
)) ?? { message }
);
}

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions