diff --git a/rclcpp/include/rclcpp/publisher.hpp b/rclcpp/include/rclcpp/publisher.hpp index c6f16643c6..3e21f936b9 100644 --- a/rclcpp/include/rclcpp/publisher.hpp +++ b/rclcpp/include/rclcpp/publisher.hpp @@ -320,7 +320,7 @@ class Publisher : public PublisherBase { if (!intra_process_is_enabled_) { // In this case we're not using intra process. - auto ros_msg_ptr = std::make_unique(); + auto ros_msg_ptr = create_ros_message_unique_ptr(); rclcpp::TypeAdapter::convert_to_ros_message(*msg, *ros_msg_ptr); this->do_inter_process_publish(*ros_msg_ptr); return; @@ -330,7 +330,8 @@ class Publisher : public PublisherBase get_subscription_count() > get_intra_process_subscription_count(); if (inter_process_publish_needed) { - auto ros_msg_ptr = std::make_shared(); + auto ros_msg_ptr = std::allocate_shared< + ROSMessageType, ROSMessageTypeAllocator>(ros_message_type_allocator_); rclcpp::TypeAdapter::convert_to_ros_message(*msg, *ros_msg_ptr); this->do_intra_process_publish(std::move(msg)); this->do_inter_process_publish(*ros_msg_ptr); @@ -339,7 +340,8 @@ class Publisher : public PublisherBase } } else { if (buffer_) { - auto ros_msg_ptr = std::make_shared(); + auto ros_msg_ptr = std::allocate_shared< + ROSMessageType, ROSMessageTypeAllocator>(ros_message_type_allocator_); rclcpp::TypeAdapter::convert_to_ros_message(*msg, *ros_msg_ptr); buffer_->add_shared(ros_msg_ptr); } @@ -367,7 +369,7 @@ class Publisher : public PublisherBase { if (!intra_process_is_enabled_) { // Convert to the ROS message equivalent and publish it. - auto ros_msg_ptr = std::make_unique(); + auto ros_msg_ptr = create_ros_message_unique_ptr(); rclcpp::TypeAdapter::convert_to_ros_message(msg, *ros_msg_ptr); this->do_inter_process_publish(*ros_msg_ptr); return; diff --git a/rclcpp/test/rclcpp/test_publisher_with_type_adapter.cpp b/rclcpp/test/rclcpp/test_publisher_with_type_adapter.cpp index d70b0e382d..313f8ea411 100644 --- a/rclcpp/test/rclcpp/test_publisher_with_type_adapter.cpp +++ b/rclcpp/test/rclcpp/test_publisher_with_type_adapter.cpp @@ -118,8 +118,8 @@ struct TypeAdapter const custom_type & source, ros_message_type & destination) { - destination.size = source.size(); - std::memcpy(destination.data.data(), source.data(), source.size()); + destination.size = std::min(source.size(), destination.data.max_size()); + std::memcpy(destination.data.data(), source.data(), destination.size); } static void