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