diff --git a/physics/discrete_trajectory_segment_body.hpp b/physics/discrete_trajectory_segment_body.hpp index d2f51af920..4a13c69a5d 100644 --- a/physics/discrete_trajectory_segment_body.hpp +++ b/physics/discrete_trajectory_segment_body.hpp @@ -213,8 +213,10 @@ void DiscreteTrajectorySegment::WriteToMessage( for (auto const it : exact) { exact_set.insert(&*it); } - exact_set.insert(&*timeline_.cbegin()); - exact_set.insert(&*timeline_.crbegin()); + if (!timeline_.empty()) { + exact_set.insert(&*timeline_.cbegin()); + exact_set.insert(&*timeline_.crbegin()); + } // Serialize the exact points. for (auto const* ptr : exact_set) { diff --git a/physics/discrete_trajectory_segment_test.cpp b/physics/discrete_trajectory_segment_test.cpp index b42499dec4..b23ac502db 100644 --- a/physics/discrete_trajectory_segment_test.cpp +++ b/physics/discrete_trajectory_segment_test.cpp @@ -443,5 +443,17 @@ TEST_F(DiscreteTrajectorySegmentTest, SerializationRoundTrip) { EXPECT_THAT(message2, EqualsProto(message1)); } +TEST_F(DiscreteTrajectorySegmentTest, SerializationEmpty) { + DiscreteTrajectorySegment segment; + serialization::DiscreteTrajectorySegment message; + segment.WriteToMessage(&message, /*exact=*/{}); + auto const deserialized_segments = MakeSegments(1); + auto& deserialized_segment = *deserialized_segments->begin(); + deserialized_segment = DiscreteTrajectorySegment::ReadFromMessage( + message, + /*self=*/MakeIterator(deserialized_segments.get(), + deserialized_segments->begin())); +} + } // namespace physics } // namespace principia