diff --git a/rcl/src/rcl/node_options.c b/rcl/src/rcl/node_options.c index 024a76d..77bedef 100644 --- a/rcl/src/rcl/node_options.c +++ b/rcl/src/rcl/node_options.c @@ -50,6 +50,10 @@ rcl_node_options_copy( RCL_SET_ERROR_MSG("Attempted to copy options into itself"); return RCL_RET_INVALID_ARGUMENT; } + if (NULL != options_out->arguments.impl) { + RCL_SET_ERROR_MSG("Options out must be zero initialized"); + return RCL_RET_INVALID_ARGUMENT; + } options_out->domain_id = options->domain_id; options_out->allocator = options->allocator; options_out->use_global_arguments = options->use_global_arguments; diff --git a/rcl/test/rcl/test_node.cpp b/rcl/test/rcl/test_node.cpp index 88a54e0..7a02536 100644 --- a/rcl/test/rcl/test_node.cpp +++ b/rcl/test/rcl/test_node.cpp @@ -784,11 +784,18 @@ TEST_F(CLASSNAME(TestNodeFixture, RMW_IMPLEMENTATION), test_rcl_node_options) { EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, rcl_node_options_fini(nullptr)); EXPECT_EQ(RCL_RET_OK, rcl_node_options_fini(&default_options)); EXPECT_EQ(RCL_RET_OK, rcl_node_options_fini(¬_ini_options)); - - // (TODO: blast545) will be fixed with: https://github.com/ros2/rcl/pull/671 - // This causes the test suite to fail: - // rcl_node_options_t default_options = rcl_node_get_default_options(); - // rcl_node_options_t not_ini_options; - // EXPECT_EQ(RCL_RET_OK, rcl_node_options_copy(&default_options, ¬_ini_options)); - // EXPECT_EQ(RCL_RET_OK, rcl_node_options_fini(¬_ini_options)); <-- code fails, returns -11 +} + +/* Tests special case node_options + */ +TEST_F(CLASSNAME(TestNodeFixture, RMW_IMPLEMENTATION), test_rcl_node_options_fail) { + rcl_node_options_t prev_ini_options = rcl_node_get_default_options(); + const char * argv[] = {"--ros-args"}; + int argc = sizeof(argv) / sizeof(const char *); + EXPECT_EQ( + RCL_RET_OK, + rcl_parse_arguments(argc, argv, rcl_get_default_allocator(), &prev_ini_options.arguments)); + + rcl_node_options_t default_options = rcl_node_get_default_options(); + EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, rcl_node_options_copy(&default_options, &prev_ini_options)); }