wangguitao created THRIFT-5507:
----------------------------------
Summary: C++ clients crash when exceptions are defined in
different IDL
Key: THRIFT-5507
URL: https://issues.apache.org/jira/browse/THRIFT-5507
Project: Thrift
Issue Type: Bug
Components: C++ - Compiler
Affects Versions: 0.15.0, 0.14.0
Environment: CentOS Linux release 7.6.1810 (Core)
Reporter: wangguitao
1st, I define a simple thrift file, as follow
*exception MyException {*
*1:required i32 code;*
*2:optional string message;*
*}*
*service MyResource {*
*i32 QueryMyResource() throws(1:MyException e);*
*}*
generate source code
*class MyResource_QueryMyResource_presult {*
*public:*
*virtual ~MyResource_QueryMyResource_presult() noexcept;*
*int32_t* success;*
*{color:#de350b}MyException e;{color}*
*_MyResource_QueryMyResource_presult__isset __isset;*
*uint32_t read(::apache::thrift::protocol::TProtocol* iprot);*
*};*
2nd, I move MyException to other file, as follow
file1
*namespace cpp MySpace*
*include "testc.thrift"*
*typedef testc.MyException MyException*
*service MyResource {*
*i32 QueryMyResource() throws(1:MyException e);*
*}*
file2
*exception MyException {*
*1:required i32 code;*
*2:optional string message;*
*}*
generate source code
*class MyResource_QueryMyResource_presult {*
*public:*
*virtual ~MyResource_QueryMyResource_presult() noexcept;*
*int32_t* success;*
*{color:#de350b}MyException* e;{color}*
*_MyResource_QueryMyResource_presult__isset __isset;*
*uint32_t read(::apache::thrift::protocol::TProtocol* iprot);*
*};*
and when client using the interface, client core dump, the core occur in
funciton uint32_t MyResource_QueryMyResource_presult::read, mark with red line
case 1:
if (ftype == ::apache::thrift::protocol::T_STRUCT) {
{color:#de350b}*xfer += (*(this->e)).read(iprot);*{color}
this->__isset.e = true;
} else {
xfer += iprot->skip(ftype);
}
the MyResource_QueryMyResource_presult field e isn't allocated memory, so
client core dump.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)