Jens Geyer created THRIFT-6035:
----------------------------------

             Summary: Harden Smalltalk protocol negative sizes
                 Key: THRIFT-6035
                 URL: https://issues.apache.org/jira/browse/THRIFT-6035
             Project: Thrift
          Issue Type: Bug
          Components: Smalltalk - Library
            Reporter: Jens Geyer


The Smalltalk library does not validate negative sizes when reading Thrift 
payloads, and the current behavior silently corrupts stream state.

Size values appear in binary/string fields and in map/list/set headers. Those 
values must be non-negative.

- readListBegin, readMapBegin, readSetBegin: return the raw signed integer size 
without any check.
- readString: the guard [sz > 0 ifTrue: [...] ifFalse: [""]] silently returns 
an empty string for negative sizes. This leaves the transport stream out of 
sync with the protocol frame -- subsequent reads will deserialize incorrect 
data with no error indication.

Although the TProtocolError class negativeSize constant (value 2) is defined, 
it is never raised in any read path.

This is a protocol hardening gap compared with other runtimes. The silent 
stream-desync in readString is particularly dangerous as it causes data 
corruption without raising any error.

The fix should:
1. Raise a TProtocolError with code negativeSize when a negative size is read 
in any container or string/binary path.
2. Remove or replace the silent ifFalse fallback in readString.

See THRIFT-6025 for the equivalent Ruby fix.



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

Reply via email to