Skip to content

Error serialization logic is faulty #51

Description

@rekmarks

Errors are "serialized" using the serializeError function, and this function has considerable issues. We use the internal utility isValidCode which only returns true if this package has a message for that code in its enums. This sucks, because technically any valid integer code is valid. I don't know what I was thinking when I implemented this.

The error serialization should continue to optionally include the stack property, but it should permit any error object (and especially, error code) that is valid per the JSON-RPC 2.0 specification, i.e. any integer number. Only if the original error object does not conform to the following interface should we modify it and replace it with a -32603 error:

type JsonRpcError = {
  code: number, // specifically, any safe integer
  message: string,
  data?: Json,
  stack?: string, // non-standard, but on occasion useful
}

If a value passed to serializeError violates this interface in any way, we should create a new JSON-RPC error as follows, where data.originalError is the original error value if it's valid JSON:

{
  code: -32603,
  message: 'Invalid internal error. See "data.originalError" for original value. Please report this bug.',
  data: { originalError }
}

See #48 and the following screenshot for examples of how the current logic mangles errors:
image

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions