Commit 18e7135c authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Stations::get_station_by_name: catch invalid regular expressions

parent c3ca160d
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -45,20 +45,14 @@ 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;