[tao-bugs] Cannot demarshal valuetypes that indirectly support abstract interfaces

Tadeu Martins tmartins at tecgraf.puc-rio.br
Wed Sep 9 10:33:19 CDT 2015


     TAO VERSION: 2.3.0
     ACE VERSION: 6.3.0

     HOST MACHINE and OPERATING SYSTEM:
         Linux 4.1.0-2-amd64 #1 SMP Debian 4.1.6-1 (2015-08-23) x86_64
GNU/Linux

     THE $ACE_ROOT/ace/config.h FILE:
         #include "ace/config-linux.h"

     THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE:
         include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU

     DOES THE PROBLEM AFFECT:
         COMPILATION?
             No.
         LINKING?
             No.
         EXECUTION?
             Yes.

     SYNOPSIS:
         A program trying to demarshal a valuetype derived from another
one that supports an abstract interface throws CORBA::MARSHAL.

     DESCRIPTION:
         At some point during the demarshalling, the program calls the
member function
`CORBA::ValueFactoryBase::create_for_unmarshal_abstract()`. The source
code has a comment telling this function should never be called. It
returns a null pointer. From there on, a series of failures occur until
`TAO::Synch_Twoway_Invocation::check_reply_status` throws a
CORBA::MARSHAL.

     REPEAT BY:
         I provided a test scenario at
<https://github.com/tmcb/tao_valuetype_demarshalling_bug>. It consists
of:

        - A valuetype that indirectly supports an abstract interface
          (through another valuetype).
         - An interface with operations that produce instances of that
           abstract interface.
         - An implementation of that producer interface. The operations'
           implementations produce instances of the derived valuetype.
         - A client that consumes those operations.

     WORKAROUND:
         The client works if support to the abstract interface is added
to the derived valuetype.



More information about the tao-bugs mailing list