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)

Reply via email to