summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-07-04 15:01:30 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-07-04 15:01:30 +0000
commitf496f55278e3f3900139d4cd0fa1856b86b8fcc4 (patch)
tree6350f1780fb09a34bba21fc9287be60fb04632fb
parentd072be16f75b89a633f2fee115166e51ac8dc117 (diff)
downloadATCD-f496f55278e3f3900139d4cd0fa1856b86b8fcc4.tar.gz
ChangeLogTag: Wed Jul 4 09:52:20 2001 Jeff Parsons <parsons@cs.wustl.edu>
-rw-r--r--TAO/tao/DynamicAny/DynCommon.cpp29
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 ());
+ }
}
}