summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-09-10 17:28:15 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-09-10 17:28:15 +0000
commite708db9760aaff98a520bb077f8d3335452fb8bf (patch)
tree976ea6423236a87623005bae4883e26952071a88
parent37e76e89428b9353f3b2b29fb9058804728ce94a (diff)
downloadATCD-e708db9760aaff98a520bb077f8d3335452fb8bf.tar.gz
ChangeLogTag: Mon Sep 10 12:23:30 2001 Jeff Parsons <parsons@cs.wustl.edu>
-rw-r--r--TAO/tao/DynamicAny/DynCommon.cpp37
-rw-r--r--TAO/tests/DynAny_Test/da_tests.idl2
-rw-r--r--TAO/tests/DynAny_Test/test_dynsequence.cpp23
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))
{