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

Jens Geyer resolved THRIFT-5854.
--------------------------------
    Fix Version/s: 0.22.0
         Assignee: Maximilian Bandle
       Resolution: Fixed

> TCompactProtocol readString checks maxMessageSize at wrong position and off 
> by one
> ----------------------------------------------------------------------------------
>
>                 Key: THRIFT-5854
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5854
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.14.0
>            Reporter: Maximilian Bandle
>            Assignee: Maximilian Bandle
>            Priority: Major
>             Fix For: 0.22.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> While changing the casts from old style casts, I noticed that there might be 
> a bug in readString. 
> The current code flow follows the logic:
>  # Read String Length
>  # Check if Length is positive and smaller then stringLimit
>  # Make sure buffer is large enough and optionally reallocate 
>  # Read into buffer and assign
>  # Check maxMessageSize and throw if exhausted
>  # Return length
> However, to avoid potentially large allocations and failing in step 4 read, 
> we can move the check of maxMessageSize before step 3 to ensure the buffer is 
> not enlarged.
>  
> Furthermore in the current check, there is a subtle bug, since we check if 
> there is still enough space to both read the string and the varint storing 
> the length. However, we have read the varint already and are thus consumed 
> the bytes already. This could lead to the check wrongly failing. 
> A changed testcase covers this behavior.



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

Reply via email to