diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-07-04 15:01:30 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-07-04 15:01:30 +0000 |
commit | f496f55278e3f3900139d4cd0fa1856b86b8fcc4 (patch) | |
tree | 6350f1780fb09a34bba21fc9287be60fb04632fb /TAO/tao | |
parent | d072be16f75b89a633f2fee115166e51ac8dc117 (diff) | |
download | ATCD-f496f55278e3f3900139d4cd0fa1856b86b8fcc4.tar.gz |
ChangeLogTag: Wed Jul 4 09:52:20 2001 Jeff Parsons <parsons@cs.wustl.edu>
Diffstat (limited to 'TAO/tao')
-rw-r--r-- | TAO/tao/DynamicAny/DynCommon.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/TAO/tao/DynamicAny/DynCommon.cpp b/TAO/tao/DynamicAny/DynCommon.cpp index fd40600de6a..02afe1a082e 100644 --- a/TAO/tao/DynamicAny/DynCommon.cpp +++ b/TAO/tao/DynamicAny/DynCommon.cpp @@ -440,16 +440,41 @@ TAO_DynCommon::insert_reference (CORBA::Object_ptr value, } else { + CORBA::Boolean good_type = 1; CORBA::TCKind kind = TAO_DynAnyFactory::unalias (this->type_.in (), ACE_TRY_ENV); ACE_CHECK; if (kind != CORBA::tk_objref) { - ACE_THROW (DynamicAny::DynAny::TypeMismatch ()); + good_type = 0; + } + else + { + const char *value_id = value->_interface_repository_id (); + + if (ACE_OS::strcmp (value_id, "IDL:omg.org/CORBA/Object:1.0") != 0) + { + const char *my_id = this->type_->id (ACE_TRY_ENV); + ACE_CHECK; + + if (ACE_OS::strcmp (value_id, my_id) != 0) + { + good_type = value->_is_a (my_id, + ACE_TRY_ENV); + ACE_CHECK; + } + } } - this->any_ <<= value; + if (good_type) + { + this->any_ <<= value; + } + else + { + ACE_THROW (DynamicAny::DynAny::TypeMismatch ()); + } } } |