From 15ada32ea2405cfc454a4a89d0414d3718d4ffea Mon Sep 17 00:00:00 2001 From: Michael Orlov Date: Fri, 8 Dec 2023 17:43:30 -0800 Subject: [PATCH 1/2] Fix for incorrect integer value conversion on Windows - Replace srtol(..) to the strtoll(..) Signed-off-by: Michael Orlov --- rcl_yaml_param_parser/src/parse.c | 2 +- rcl_yaml_param_parser/test/correct_config.yaml | 2 +- rcl_yaml_param_parser/test/test_parse_yaml.cpp | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/rcl_yaml_param_parser/src/parse.c b/rcl_yaml_param_parser/src/parse.c index 7e093b9a3..8557fd3de 100644 --- a/rcl_yaml_param_parser/src/parse.c +++ b/rcl_yaml_param_parser/src/parse.c @@ -151,7 +151,7 @@ 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 (('\0' != *value) && ('\0' == *endptr)) { 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); From bef8bd176fb7a9fefbb77c13895f3edd8e2c8034 Mon Sep 17 00:00:00 2001 From: Michael Orlov Date: Mon, 11 Dec 2023 12:03:56 -0800 Subject: [PATCH 2/2] Remove extra check for NULL != endptr per review request Co-authored-by: Chris Lalancette Co-authored-by: Chris Lalancette Signed-off-by: Michael Orlov --- rcl_yaml_param_parser/src/parse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rcl_yaml_param_parser/src/parse.c b/rcl_yaml_param_parser/src/parse.c index 8557fd3de..63d162a1c 100644 --- a/rcl_yaml_param_parser/src/parse.c +++ b/rcl_yaml_param_parser/src/parse.c @@ -153,7 +153,7 @@ void * get_value( errno = 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);