summaryrefslogtreecommitdiff
path: root/lib/Travel/Status
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2020-11-22 19:44:25 +0100
committerDaniel Friesel <derf@finalrewind.org>2020-11-22 19:44:25 +0100
commit18e7135cca2d7ff6fccc2b14f8c1bbf7cf4554ff (patch)
tree7996548f8f4f4a967fedc3b80e5ed23e25da1e8b /lib/Travel/Status
parentc3ca160d01cf1b10f8ae20fb2425826d28297122 (diff)
Stations::get_station_by_name: catch invalid regular expressions
Diffstat (limited to 'lib/Travel/Status')
-rw-r--r--lib/Travel/Status/DE/IRIS/Stations.pm.PL27
1 files changed, 13 insertions, 14 deletions
diff --git a/lib/Travel/Status/DE/IRIS/Stations.pm.PL b/lib/Travel/Status/DE/IRIS/Stations.pm.PL
index b19043f..3547448 100644
--- a/lib/Travel/Status/DE/IRIS/Stations.pm.PL
+++ b/lib/Travel/Status/DE/IRIS/Stations.pm.PL
@@ -41,24 +41,18 @@ our $VERSION = '1.51';
my @stations = (
EOF
-for my $station (@{$stations}) {
- if ($station->{latlong}) {
+for my $station ( @{$stations} ) {
+ if ( $station->{latlong} ) {
$buf .= sprintf(
"['%s','%s',%s,%s,%s],\n",
- $station->{ds100},
- $station->{name},
- $station->{eva},
- $station->{latlong}[1],
+ $station->{ds100}, $station->{name},
+ $station->{eva}, $station->{latlong}[1],
$station->{latlong}[0],
);
}
else {
- $buf .= sprintf(
- "['%s','%s',%s],\n",
- $station->{ds100},
- $station->{name},
- $station->{eva}
- );
+ $buf .= sprintf( "['%s','%s',%s],\n",
+ $station->{ds100}, $station->{name}, $station->{eva} );
}
}
@@ -148,7 +142,12 @@ sub get_station_by_name {
my $min_dist = min(@distances);
my @station_map = pairwise { [ $a, $b ] } @stations, @distances;
- my @substring_matches = grep { $_->[1] =~ m{$name}i } @stations;
+ my @substring_matches;
+
+ # $name may be an invalid regular expression
+ eval { push(@substring_matches, grep { $_->[1] =~ m{\Q$name\E}i } @stations) };
+ eval { push(@substring_matches, grep { $_->[1] =~ m{$name}i } @stations) };
+
my @levenshtein_matches
= map { $_->[0] } grep { $_->[1] == $min_dist } @station_map;
@@ -297,4 +296,4 @@ station data used by this module is also available under a CC-BY 4.0 license on
L<http://data.deutschebahn.com/dataset/data-haltestellen>.
EOF
-write_file($ARGV[0], {binmode => ':utf8'}, $buf);
+write_file( $ARGV[0], { binmode => ':utf8' }, $buf );