diff --git a/rcl_yaml_param_parser/src/parse.c b/rcl_yaml_param_parser/src/parse.c index 7e093b9a3..63d162a1c 100644 --- a/rcl_yaml_param_parser/src/parse.c +++ b/rcl_yaml_param_parser/src/parse.c @@ -151,9 +151,9 @@ void * get_value( style != YAML_DOUBLE_QUOTED_SCALAR_STYLE) { errno = 0; - ival = strtol(value, &endptr, 0); + ival = strtoll(value, &endptr, 0); if ((0 == errno) && (NULL != endptr)) { - if ((NULL != endptr) && (endptr != value)) { + if (endptr != value) { if (('\0' != *value) && ('\0' == *endptr)) { *val_type = DATA_TYPE_INT64; ret_val = allocator.zero_allocate(1U, sizeof(int64_t), allocator.state); diff --git a/rcl_yaml_param_parser/test/correct_config.yaml b/rcl_yaml_param_parser/test/correct_config.yaml index 502b3e3d9..b55d438aa 100644 --- a/rcl_yaml_param_parser/test/correct_config.yaml +++ b/rcl_yaml_param_parser/test/correct_config.yaml @@ -18,7 +18,7 @@ lidar_ns: dy: 0.45 lidar_2: ros__parameters: - id: 11 + id: 992147483647 name: back_lidar dy1: 0.003 is_back: false diff --git a/rcl_yaml_param_parser/test/test_parse_yaml.cpp b/rcl_yaml_param_parser/test/test_parse_yaml.cpp index 9a357c7c2..fa2c29cdd 100644 --- a/rcl_yaml_param_parser/test/test_parse_yaml.cpp +++ b/rcl_yaml_param_parser/test/test_parse_yaml.cpp @@ -92,7 +92,8 @@ TEST(test_parser, correct_syntax) { param_value = rcl_yaml_node_struct_get("lidar_ns/lidar_2", "id", params); ASSERT_TRUE(NULL != param_value) << rcutils_get_error_string().str; ASSERT_TRUE(NULL != param_value->integer_value); - EXPECT_EQ(11, *param_value->integer_value); + // Make sure that we can correctly parse bigger than LONG_MAX = 2147483647 values + EXPECT_EQ(992147483647, *param_value->integer_value); res = rcl_parse_yaml_value("lidar_ns/lidar_2", "id", "12", params); EXPECT_TRUE(res) << rcutils_get_error_string().str; ASSERT_TRUE(NULL != param_value->integer_value);