[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