diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-09-10 17:28:15 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-09-10 17:28:15 +0000 |
commit | e708db9760aaff98a520bb077f8d3335452fb8bf (patch) | |
tree | 976ea6423236a87623005bae4883e26952071a88 | |
parent | 37e76e89428b9353f3b2b29fb9058804728ce94a (diff) | |
download | ATCD-e708db9760aaff98a520bb077f8d3335452fb8bf.tar.gz |
ChangeLogTag: Mon Sep 10 12:23:30 2001 Jeff Parsons <parsons@cs.wustl.edu>
-rw-r--r-- | TAO/tao/DynamicAny/DynCommon.cpp | 37 | ||||
-rw-r--r-- | TAO/tests/DynAny_Test/da_tests.idl | 2 | ||||
-rw-r--r-- | TAO/tests/DynAny_Test/test_dynsequence.cpp | 23 |
3 files changed, 43 insertions, 19 deletions
diff --git a/TAO/tao/DynamicAny/DynCommon.cpp b/TAO/tao/DynamicAny/DynCommon.cpp index 494a71ae953..d3c363944aa 100644 --- a/TAO/tao/DynamicAny/DynCommon.cpp +++ b/TAO/tao/DynamicAny/DynCommon.cpp @@ -397,10 +397,18 @@ TAO_DynCommon::insert_string (const char * value, else { CORBA::TypeCode_var unaliased_tc = - this->check_type_and_unalias (CORBA::_tc_string, - ACE_TRY_ENV); + TAO_DynAnyFactory::strip_alias (this->type_.in (), + ACE_TRY_ENV); + ACE_CHECK; + + CORBA::TCKind kind = unaliased_tc->kind (ACE_TRY_ENV); ACE_CHECK; + if (kind != CORBA::tk_string) + { + ACE_THROW (DynamicAny::DynAny::TypeMismatch ()); + } + CORBA::ULong bound = unaliased_tc->length (ACE_TRY_ENV); ACE_CHECK; @@ -1098,21 +1106,32 @@ TAO_DynCommon::get_string (CORBA::Environment &ACE_TRY_ENV) } else { - // @@@ (JP) Someday try to find a way to avoid checking for - // type code equivalence twice without risking a throw of - // BadKind. CORBA::TypeCode_var unaliased_tc = - this->check_type_and_unalias (CORBA::_tc_string, - ACE_TRY_ENV); + TAO_DynAnyFactory::strip_alias (this->type_.in (), + ACE_TRY_ENV); ACE_CHECK_RETURN (0); + CORBA::TCKind kind = unaliased_tc->kind (ACE_TRY_ENV); + ACE_CHECK_RETURN (0); + + if (kind != CORBA::tk_string) + { + ACE_THROW_RETURN (DynamicAny::DynAny::TypeMismatch (), + 0); + } + char *retval = 0; CORBA::ULong bound = unaliased_tc->length (ACE_TRY_ENV); ACE_CHECK_RETURN (0); - (void) (this->any_ >>= CORBA::Any::to_string (retval, - bound)); + // We will have caught a type mismatch above, so if this fails, + // it must be for some other reason. + if ((this->any_ >>= CORBA::Any::to_string (retval, bound)) == 0) + { + ACE_THROW_RETURN (DynamicAny::DynAny::InvalidValue (), + 0); + } return CORBA::string_dup (retval); } diff --git a/TAO/tests/DynAny_Test/da_tests.idl b/TAO/tests/DynAny_Test/da_tests.idl index ad661c418e3..4b797e77f4d 100644 --- a/TAO/tests/DynAny_Test/da_tests.idl +++ b/TAO/tests/DynAny_Test/da_tests.idl @@ -19,7 +19,7 @@ module DynAnyTests enclosed_struct es; }; - typedef sequence<string> test_seq; + typedef sequence<string<8> > test_seq; const unsigned long DIM = 2; typedef long test_array [DIM]; diff --git a/TAO/tests/DynAny_Test/test_dynsequence.cpp b/TAO/tests/DynAny_Test/test_dynsequence.cpp index 9b1e8c22aa3..61c62345a03 100644 --- a/TAO/tests/DynAny_Test/test_dynsequence.cpp +++ b/TAO/tests/DynAny_Test/test_dynsequence.cpp @@ -55,7 +55,8 @@ Test_DynSequence::run_test (void) data.labels[11])); ACE_DEBUG ((LM_DEBUG, - "testing: constructor(Any)/insert/get/seek/rewind/current_component\n")); + "testing: constructor(Any)/insert/get/seek/" + "rewind/current_component\n")); CORBA::Object_var factory_obj = this->orb_->resolve_initial_references ("DynAnyFactory", @@ -82,8 +83,9 @@ Test_DynSequence::run_test (void) dynany_factory->create_dyn_any (in_any1, ACE_TRY_ENV); ACE_TRY_CHECK; - DynamicAny::DynSequence_var fa1 = DynamicAny::DynSequence::_narrow (dp1.in (), - ACE_TRY_ENV); + DynamicAny::DynSequence_var fa1 = + DynamicAny::DynSequence::_narrow (dp1.in (), + ACE_TRY_ENV); ACE_TRY_CHECK; fa1->seek (1, ACE_TRY_ENV); @@ -133,7 +135,8 @@ Test_DynSequence::run_test (void) for (i = 0; i < length; ++i) { - elem_any <<= values[i]; + elem_any <<= CORBA::Any::from_string (values[i], + 8); elements[i] = dynany_factory->create_dyn_any (elem_any, ACE_TRY_ENV); ACE_TRY_CHECK; @@ -186,8 +189,10 @@ Test_DynSequence::run_test (void) "testing: constructor(TypeCode)/from_any/to_any\n")); DynamicAny::DynAny_var ftc1_base = - dynany_factory->create_dyn_any_from_type_code (DynAnyTests::_tc_test_seq, - ACE_TRY_ENV); + dynany_factory->create_dyn_any_from_type_code ( + DynAnyTests::_tc_test_seq, + ACE_TRY_ENV + ); ACE_TRY_CHECK; DynamicAny::DynSequence_var ftc1 = @@ -240,10 +245,10 @@ Test_DynSequence::run_test (void) DynamicAny::AnySeq as_in (3); as_in.length (3); CORBA_Any in_any3; - in_any3 <<= CORBA::Any::from_string (data.m_string2, 0); + in_any3 <<= CORBA::Any::from_string (data.m_string2, 8); as_in[0] = in_any3; as_in[1] = in_any3; - in_any3 <<= CORBA::Any::from_string (data.m_string1, 0); + in_any3 <<= CORBA::Any::from_string (data.m_string1, 8); as_in[2] = in_any3; ftc1->set_elements (as_in, ACE_TRY_ENV); @@ -253,7 +258,7 @@ Test_DynSequence::run_test (void) CORBA::ULong index = 2; CORBA_Any out_any2 = as_out[index]; char* out_str2; - out_any2 >>= CORBA::Any::to_string (out_str2, 0); + out_any2 >>= CORBA::Any::to_string (out_str2, 8); if (ACE_OS::strcmp (out_str2, data.m_string1)) { |