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)

Reply via email to