diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e68b286be7..7e2ab425945 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - CHANGED: switch to pre-calculated distances for table responses for large speedup and 10% memory increase. [#5251](https://github.com/Project-OSRM/osrm-backend/pull/5251) - ADDED: new parameter `fallback_speed` which will fill `null` cells with estimated value [#5257](https://github.com/Project-OSRM/osrm-backend/pull/5257) - CHANGED: Remove API check for matrix sources/destination length to be less than or equal to coordinates length. [#5298](https://github.com/Project-OSRM/osrm-backend/pull/5289) + - FIXED: Fix crashing bug when using fallback_speed parameter with more sources than destinations. [#5291](https://github.com/Project-OSRM/osrm-backend/pull/5291) - Features: - ADDED: direct mmapping of datafiles is now supported via the `--mmap` switch. [#5242](https://github.com/Project-OSRM/osrm-backend/pull/5242) - REMOVED: the previous `--memory_file` switch is now deprecated and will fallback to `--mmap` [#5242](https://github.com/Project-OSRM/osrm-backend/pull/5242) diff --git a/features/testbot/distance_matrix.feature b/features/testbot/distance_matrix.feature index 83d32d28347..f48db123d94 100644 --- a/features/testbot/distance_matrix.feature +++ b/features/testbot/distance_matrix.feature @@ -666,4 +666,49 @@ Feature: Basic Distance Matrix | a | 0 | 300.2 | 900.7 | 1200.9 | | b | 300.2 | 0 | 600.5 | 900.7 | | f | 900.7 | 600.5 | 0 | 302.2 | - | 1 | 1200.9 | 900.7 | 300.2 | 0 | \ No newline at end of file + | 1 | 1200.9 | 900.7 | 300.2 | 0 | + + Scenario: Testbot - Asymetric fallback_speed - more sources than destinations + Given a grid size of 300 meters + Given the extract extra arguments "--small-component-size 4" + Given the query options + | fallback_speed | 5 | + | fallback_coordinate | snapped | + Given the node map + """ + a b f h 1 + d e g i + """ + + And the ways + | nodes | + | abeda | + | fhigf | + + When I request a travel distance matrix I should get + | | a | + | a | 0 | + | b | 300.2 | + | f | 900.7 | + | 1 | 1200.9 | + + Scenario: Testbot - Asymetric fallback_speed - more destinations than sources + Given a grid size of 300 meters + Given the extract extra arguments "--small-component-size 4" + Given the query options + | fallback_speed | 5 | + | fallback_coordinate | snapped | + Given the node map + """ + a b f h 1 + d e g i + """ + + And the ways + | nodes | + | abeda | + | fhigf | + + When I request a travel distance matrix I should get + | | a | b | f | 1 | + | a | 0 | 300.2 | 900.7 | 1200.9 | diff --git a/src/engine/plugins/table.cpp b/src/engine/plugins/table.cpp index d1d7786eec8..50e41d75b8e 100644 --- a/src/engine/plugins/table.cpp +++ b/src/engine/plugins/table.cpp @@ -102,7 +102,8 @@ Status TablePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms, { for (std::size_t column = 0; column < num_destinations; column++) { - const auto &table_index = row * num_sources + column; + const auto &table_index = row * num_destinations + column; + BOOST_ASSERT(table_index < result_tables_pair.first.size()); if (result_tables_pair.first[table_index] == MAXIMAL_EDGE_DURATION) { const auto &source =