You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "James E. King III (JIRA)" <ji...@apache.org> on 2019/01/31 01:04:00 UTC

[jira] [Commented] (THRIFT-4138) Fix remaining undefined behavior invalid vptr casts in C++ library

    [ https://issues.apache.org/jira/browse/THRIFT-4138?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16756749#comment-16756749 ] 

James E. King III commented on THRIFT-4138:
-------------------------------------------

This broke TJSONProtocol's ability to read in some negative values.  For example if the sequence ID becomes negative (which is allowed - it's a signed 32-bit int), it is read into an unsigned 64-bit int, which corrupts it.:
{noformat}
Thread 2 "TestServer" hit Breakpoint 1, apache::thrift::protocol::TJSONProtocol::readJSONInteger<unsigned long> (this=0x7ffff0001610, num=@0x7ffff5262938: 1)
    at src/thrift/protocol/TJSONProtocol.cpp:868
868         num = fromString<NumberType>(str);
(gdb) p str
$54 = "-2147483648"
(gdb) s
apache::thrift::protocol::(anonymous namespace)::fromString<unsigned long> (s="-2147483648") at src/thrift/protocol/TJSONProtocol.cpp:846
846     T fromString(const std::string& s) {
(gdb) n
848       std::istringstream str(s);
(gdb) p s
$55 = "-2147483648"
(gdb) n
849       str.imbue(std::locale::classic());
(gdb) n
850       str >> t;
(gdb) n
851       if (str.bad() || !str.eof())
(gdb) p t
$56 = 18446744071562067968
{noformat}

So unfortunately we replaced undefined behavior with incorrect behavior...  I caught this as part of THRIFT-4405.

> Fix remaining undefined behavior invalid vptr casts in C++ library
> ------------------------------------------------------------------
>
>                 Key: THRIFT-4138
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4138
>             Project: Thrift
>          Issue Type: Sub-task
>          Components: C++ - Library
>            Reporter: Jens Geyer
>            Assignee: Jim Apple
>            Priority: Major
>             Fix For: 0.11.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)