[ 
https://issues.apache.org/jira/browse/THRIFT-6366?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jens Geyer resolved THRIFT-6366.
--------------------------------
    Fix Version/s: 0.25.0
         Assignee: Jens Geyer
       Resolution: Fixed

> Erlang: bound the size of a message the binary and compact protocols read
> -------------------------------------------------------------------------
>
>                 Key: THRIFT-6366
>                 URL: https://issues.apache.org/jira/browse/THRIFT-6366
>             Project: Thrift
>          Issue Type: Bug
>          Components: Erlang - Library
>            Reporter: Jens Geyer
>            Assignee: Jens Geyer
>            Priority: Minor
>              Labels: Breaking-Change
>             Fix For: 0.25.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> {{thrift_binary_protocol}} and {{thrift_compact_protocol}} read a string or 
> binary with whatever length its header declares, and nothing bounds the size 
> of a message as a whole. The Erlang library has had a setting for this since 
> THRIFT-6283: the thrift application's {{max_message_size}}, 100 MB by default 
> ({{?DEFAULT_MAX_MESSAGE_SIZE}}). So far only the replies 
> {{thrift_http_transport}} reads are held to it.
> h2. Change
> * Both protocols read a message only up to {{max_message_size}}. That is the 
> {{max_message_size}} option of {{new/2}} or of the protocol factory, or else 
> the application setting as it is when the protocol is created.
> * Each read takes its bytes from what the message may still take, before they 
> are read. A string whose declared length would take the message past the 
> maximum is refused on its length alone.
> * {{message_begin}} sets that budget and {{message_end}} clears it. Between 
> messages each read is held to the maximum on its own, so structs read without 
> a message around them do not add up.
> * A refusal is {{\{error, \{message_size_exceeds_maximum, Max\}\}}}. 
> {{message_begin}} returns it. Inside a message it fails the read the way 
> other read errors do, and the server closes that connection.
> * {{thrift_client_util}} passes a {{max_message_size}} client option on to 
> the protocol. {{thrift_socket_server}} takes only atom protocols, so a server 
> uses the application setting.
> A message over 100 MB was accepted before and is now refused, unless the 
> setting is raised.
> Reported by Sylwester Lachiewicz.
> _Drafted with AI assistance (Claude Opus 5.5)._



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

Reply via email to