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

Dmytro Shteflyuk resolved THRIFT-6106.
--------------------------------------
    Fix Version/s: 0.25.0
       Resolution: Fixed

> Ruby native protocol readers should decode fixed-width values without 
> undefined shifts
> --------------------------------------------------------------------------------------
>
>                 Key: THRIFT-6106
>                 URL: https://issues.apache.org/jira/browse/THRIFT-6106
>             Project: Thrift
>          Issue Type: Bug
>          Components: Ruby - Library
>            Reporter: Dmytro Shteflyuk
>            Assignee: Dmytro Shteflyuk
>            Priority: Major
>             Fix For: 0.25.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> h3. Problem
> The Ruby native extension assembles fixed-width protocol values with shifts 
> performed after a byte has been promoted to a signed {{int}}. Edge byte 
> patterns can therefore invoke undefined behavior even when the decoded number 
> happens to look correct on a particular platform.
> h3. Client impact
> Applications that load {{thrift_native}} can get compiler- and 
> platform-dependent behavior when reading signed integer fields or doubles 
> whose encoded bytes set the high bit. The pure-Ruby reader is not affected.
> h3. Reproduction
> From {{lib/rb}}, build the native extension with UBSan and run the focused 
> protocol examples:
> {code:sh}
> make -C ext clean all CFLAGS='-fPIC -O1 -g -fsanitize=undefined 
> -fno-sanitize-recover=undefined' DLDFLAGS='-fsanitize=undefined'
> UBSAN_OPTIONS='halt_on_error=1:print_stacktrace=1' bundle exec rspec 
> spec/binary_protocol_spec.rb spec/compact_protocol_spec.rb --example 
> fixed-width
> {code}
> Before this change, UBSan reports:
> {noformat}
> compact_protocol.c:618:42: runtime error: left shift of 128 by 24 places 
> cannot be represented in type 'int'
> {noformat}
> h3. Expected behavior
> Native readers should assemble fixed-width values with explicitly sized 
> unsigned intermediates, then convert to the intended signed value after 
> assembly. Edge byte patterns should decode consistently without UBSan 
> diagnostics.



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

Reply via email to