From 1a92dcacc23fe9d5f5b9406f1c982987602ecb00 Mon Sep 17 00:00:00 2001 From: Robert Maupin Date: Wed, 5 Feb 2020 10:22:02 -0500 Subject: [PATCH 1/2] Correct resize to prevent SIGSEGV on HDL64 S3. Testing on a HDL64 S3, after much investigating, requires the vector to be larger to accommodate the larger amount of data. Otherwise a SIGSEGV occurs due to invalid memory access. --- .../include/velodyne_pointcloud/datacontainerbase.hpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/velodyne_pointcloud/include/velodyne_pointcloud/datacontainerbase.hpp b/velodyne_pointcloud/include/velodyne_pointcloud/datacontainerbase.hpp index b0a82c259..7553c2061 100644 --- a/velodyne_pointcloud/include/velodyne_pointcloud/datacontainerbase.hpp +++ b/velodyne_pointcloud/include/velodyne_pointcloud/datacontainerbase.hpp @@ -124,7 +124,12 @@ class DataContainerBase cloud.height = config_.init_height; cloud.is_dense = static_cast(config_.is_dense); cloud.row_step = cloud.width * cloud.point_step; - cloud.data.resize(scan_msg->packets.size() * config_.scans_per_packet * cloud.point_step); + int data_size = scan_msg->packets.size() * config_.scans_per_packet * cloud.point_step; + // additional space is required for HDL64 S3 + if(!cloud.is_dense && cloud.width == 64) { + data_size = scan_msg->packets.size() * config_.scans_per_packet * cloud.point_step * 2; + } + cloud.data.resize(data_size); // Clear out the last data; this is important in the organized cloud case std::fill(cloud.data.begin(), cloud.data.end(), 0); if (config_.transform) { From aa6f0a137d6de9d788a214d6f0fbe3170e8bd1e9 Mon Sep 17 00:00:00 2001 From: Robert Maupin Date: Wed, 5 Feb 2020 10:37:34 -0500 Subject: [PATCH 2/2] Fix spacing to pass uncrustify test. --- .../include/velodyne_pointcloud/datacontainerbase.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/velodyne_pointcloud/include/velodyne_pointcloud/datacontainerbase.hpp b/velodyne_pointcloud/include/velodyne_pointcloud/datacontainerbase.hpp index 7553c2061..ccea34adc 100644 --- a/velodyne_pointcloud/include/velodyne_pointcloud/datacontainerbase.hpp +++ b/velodyne_pointcloud/include/velodyne_pointcloud/datacontainerbase.hpp @@ -126,7 +126,7 @@ class DataContainerBase cloud.row_step = cloud.width * cloud.point_step; int data_size = scan_msg->packets.size() * config_.scans_per_packet * cloud.point_step; // additional space is required for HDL64 S3 - if(!cloud.is_dense && cloud.width == 64) { + if (!cloud.is_dense && cloud.width == 64) { data_size = scan_msg->packets.size() * config_.scans_per_packet * cloud.point_step * 2; } cloud.data.resize(data_size);