From e275fc6dbe84afa1c6dcff51ea34f35415a4f771 Mon Sep 17 00:00:00 2001
From: Derf Null <derf@finalrewind.org>
Date: Wed, 7 Jun 2023 23:04:00 +0200
Subject: [PATCH] Fix edge case that allowed in-transit journeys with invalid
 destinations

---
 lib/Travelynx.pm | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index 6dd77fdb..9dc1affb 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -519,6 +519,26 @@ sub startup {
 				delete $journey->{edited};
 				delete $journey->{id};
 
+				# users may force checkouts at stations that are not part of
+				# the train's scheduled (or real-time) route. re-adding those
+				# to in-transit violates the assumption that each train has
+				# a valid destination. Remove the target in this case.
+				my $route = JSON->new->decode( $journey->{route} );
+				my $found_checkout_id;
+				for my $stop ( @{$route} ) {
+					if ( $stop->[1] == $journey->{checkout_station_id} ) {
+						$found_checkout_id = 1;
+						last;
+					}
+				}
+				if ( not $found_checkout_id ) {
+					$journey->{checkout_station_id} = undef;
+					$journey->{checkout_time}       = undef;
+					$journey->{arr_platform}        = undef;
+					$journey->{sched_arrival}       = undef;
+					$journey->{real_arrival}        = undef;
+				}
+
 				$self->in_transit->add_from_journey(
 					db      => $db,
 					journey => $journey
-- 
GitLab