Jens Geyer created THRIFT-6331:
----------------------------------

             Summary: XHRConnection.read() cannot read a binary reply
                 Key: THRIFT-6331
                 URL: https://issues.apache.org/jira/browse/THRIFT-6331
             Project: Thrift
          Issue Type: Bug
          Components: Node.js - Library
    Affects Versions: 0.24.0
            Reporter: Jens Geyer


Since THRIFT-4987, {{XHRConnection.flush()}} passes the replies of the binary 
protocols to {{setRecvBuffer()}} as an {{ArrayBuffer}}. {{setRecvBuffer()}} 
takes the size from {{length}}, which an {{ArrayBuffer}} does not have, so 
{{recv_buf_sz}} and {{wpos}} end up {{undefined}}. {{read()}} then calls 
{{substr()}} on the {{ArrayBuffer}}:

{noformat}
TypeError: this.recv_buf.substr is not a function
{noformat}

Decoding a reply is not affected, because it goes through {{Buffer.from()}} and 
the transport's {{receiver()}}. Only code that calls {{read()}} directly is.

On master, {{read()}} fails for every reply for a second reason: it reads from 
{{read_buf}}, which is never set. [PR 
#3920|https://github.com/apache/thrift/pull/3920] fixes that. This ticket 
covers the binary replies, which still fail after that fix.

Proposed fix: size an {{ArrayBuffer}} by its {{byteLength}}, and let {{read()}} 
return its bytes as a {{Buffer}}. The string replies of {{TJSONProtocol}} are 
read as before.

_Drafted with AI assistance (Claude Opus 5); reviewed and posted by Jens Geyer._




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to