@@ -610,11 +610,10 @@ rcl_parse_arguments(
610610
611611 // Attempt to parse argument as parameter file rule
612612 args_impl -> parameter_files [args_impl -> num_param_files_args ] = NULL ;
613- if (
614- RCL_RET_OK == _rcl_parse_param_file_rule (
615- argv [i ], allocator , args_impl -> parameter_overrides ,
616- & args_impl -> parameter_files [args_impl -> num_param_files_args ]))
617- {
613+ ret = _rcl_parse_param_file_rule (
614+ argv [i ], allocator , args_impl -> parameter_overrides ,
615+ & args_impl -> parameter_files [args_impl -> num_param_files_args ]);
616+ if (RCL_RET_OK == ret ) {
618617 ++ (args_impl -> num_param_files_args );
619618 RCUTILS_LOG_WARN_NAMED (ROS_PACKAGE_NAME ,
620619 "Found parameter file rule '%s'. This syntax is deprecated. Use '%s %s %s' instead." ,
@@ -625,6 +624,10 @@ rcl_parse_arguments(
625624 args_impl -> parameter_files [args_impl -> num_param_files_args - 1 ],
626625 args_impl -> num_param_files_args );
627626 continue ;
627+ } else if (RCL_RET_ERROR == ret ) {
628+ // If we return RCL_RET_ERROR then the argument contained the prefix '__params:=',
629+ // but the parameter file may be malformed or does not exist.
630+ goto fail ;
628631 }
629632 RCUTILS_LOG_DEBUG_NAMED (ROS_PACKAGE_NAME ,
630633 "Couldn't parse arg %d (%s) as a deprecated parameter file rule. Error: %s" ,
@@ -751,7 +754,7 @@ rcl_parse_arguments(
751754 }
752755
753756 // Drop parameter overrides if none was found.
754- if (0U == args_impl -> parameter_overrides -> num_nodes ) {
757+ if (NULL != args_impl -> parameter_overrides && 0U == args_impl -> parameter_overrides -> num_nodes ) {
755758 rcl_yaml_node_struct_fini (args_impl -> parameter_overrides );
756759 args_impl -> parameter_overrides = NULL ;
757760 }
0 commit comments