Jens Geyer created THRIFT-6259:
----------------------------------
Summary: Node.js: TJSONProtocol.skip() throws a plain Error for an
unknown type name
Key: THRIFT-6259
URL: https://issues.apache.org/jira/browse/THRIFT-6259
Project: Thrift
Issue Type: Bug
Components: Node.js - Library
Reporter: Jens Geyer
{{lib/nodejs/lib/thrift/json_protocol.js}}, at the end of
{{TJSONProtocol.prototype.skip}} (line 880):
{code:javascript}
default:
throw new Error("Invalid type: " + type);
{code}
Every other error path in the protocol raises {{Thrift.TProtocolException}},
which carries a {{TProtocolExceptionType}} a caller can switch on. Here a
peer-supplied type name that the protocol does not know produces a plain
{{Error}} instead, so a server whose error handling is written against
{{TProtocolException}} does not recognise it.
It is reachable from ordinary input: a message whose struct contains a field
the receiver does not declare goes through {{skip()}}, and
{code}{"1":{"bogus":5}}{code} names a type the switch has no case for.
h2. Suggested fix
Throw
{code:javascript}
new Thrift.TProtocolException(Thrift.TProtocolExceptionType.INVALID_DATA,
"Invalid type: " + type);
{code}
matching the {{DEPTH_LIMIT}} raises a few lines above ({{:801}}, {{:815}}),
which already use {{Thrift.TProtocolException}}. Two other protocol-level
{{throw new Error}} sites in this file are the same question and could be
changed with it: {{:459}} ("Malformed JSON input, no opening bracket") and
{{:511}} ("Wrong thrift protocol version"). The {{writeString}}/{{writeBinary}}
argument checks at {{:368}} and {{:423}} are caller mistakes rather than
protocol errors and can stay as they are.
_Drafted with AI assistance (Claude Opus 5); reviewed and filed by Jens Geyer._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)