From 862bdeea5c0b5b91c6ce8c95bb48a350cc378ad7 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Tue, 26 Jan 2021 14:01:28 +0100 Subject: [PATCH] Avoid segmentation fault if the Tracking item_type is not defined for the given implementation --- src/algorithms/channel/adapters/channel.cc | 10 +++++++++- .../tracking/adapters/beidou_b1i_dll_pll_tracking.cc | 2 +- .../tracking/adapters/beidou_b3i_dll_pll_tracking.cc | 2 +- .../adapters/galileo_e1_dll_pll_veml_tracking.cc | 2 +- .../adapters/galileo_e1_tcp_connector_tracking.cc | 2 +- .../tracking/adapters/galileo_e5a_dll_pll_tracking.cc | 2 +- .../tracking/adapters/galileo_e5b_dll_pll_tracking.cc | 2 +- .../tracking/adapters/galileo_e6_dll_pll_tracking.cc | 2 +- .../adapters/glonass_l1_ca_dll_pll_c_aid_tracking.cc | 2 +- .../adapters/glonass_l1_ca_dll_pll_tracking.cc | 2 +- .../adapters/glonass_l2_ca_dll_pll_c_aid_tracking.cc | 2 +- .../adapters/glonass_l2_ca_dll_pll_tracking.cc | 2 +- .../tracking/adapters/gps_l1_ca_dll_pll_tracking.cc | 2 +- .../adapters/gps_l1_ca_dll_pll_tracking_gpu.cc | 2 +- .../tracking/adapters/gps_l1_ca_kf_tracking.cc | 2 +- .../adapters/gps_l1_ca_tcp_connector_tracking.cc | 2 +- .../tracking/adapters/gps_l2_m_dll_pll_tracking.cc | 2 +- .../tracking/adapters/gps_l5_dll_pll_tracking.cc | 2 +- src/core/receiver/gnss_block_factory.cc | 5 +++++ src/core/receiver/gnss_flowgraph.cc | 2 +- 20 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/algorithms/channel/adapters/channel.cc b/src/algorithms/channel/adapters/channel.cc index 176e2983c..2c9d54387 100644 --- a/src/algorithms/channel/adapters/channel.cc +++ b/src/algorithms/channel/adapters/channel.cc @@ -23,7 +23,8 @@ #include "telemetry_decoder_interface.h" #include "tracking_interface.h" #include -#include // for std::move +#include // for std::invalid_argument +#include // for std::move Channel::Channel(const ConfigurationInterface* configuration, @@ -113,6 +114,13 @@ void Channel::connect(gr::top_block_sptr top_block) acq_->connect(top_block); } trk_->connect(top_block); + + if (trk_->item_size() == 0) + { + std::string msg = trk_->role() + ".item_type is not defined for implementation " + trk_->implementation() + '\n'; + throw std::invalid_argument(msg); + } + nav_->connect(top_block); // Synchronous ports diff --git a/src/algorithms/tracking/adapters/beidou_b1i_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/beidou_b1i_dll_pll_tracking.cc index b9ca4f26f..ec7b2b503 100644 --- a/src/algorithms/tracking/adapters/beidou_b1i_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/beidou_b1i_dll_pll_tracking.cc @@ -72,7 +72,7 @@ BeidouB1iDllPllTracking::BeidouB1iDllPllTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << trk_params.item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/beidou_b3i_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/beidou_b3i_dll_pll_tracking.cc index 50d7e7db9..8d7eb3487 100644 --- a/src/algorithms/tracking/adapters/beidou_b3i_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/beidou_b3i_dll_pll_tracking.cc @@ -64,7 +64,7 @@ BeidouB3iDllPllTracking::BeidouB3iDllPllTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << trk_params.item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.cc b/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.cc index e9de4c014..d77519495 100644 --- a/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.cc +++ b/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.cc @@ -65,7 +65,7 @@ GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << trk_params.item_type << " unknown tracking item type."; } diff --git a/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.cc b/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.cc index 6ce6613fb..d4c4c8340 100644 --- a/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.cc +++ b/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.cc @@ -74,7 +74,7 @@ GalileoE1TcpConnectorTracking::GalileoE1TcpConnectorTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.cc index 38a88833e..b954a800a 100644 --- a/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.cc @@ -65,7 +65,7 @@ GalileoE5aDllPllTracking::GalileoE5aDllPllTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << trk_params.item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/galileo_e5b_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/galileo_e5b_dll_pll_tracking.cc index ef072c0ff..a77999ff1 100644 --- a/src/algorithms/tracking/adapters/galileo_e5b_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/galileo_e5b_dll_pll_tracking.cc @@ -66,7 +66,7 @@ GalileoE5bDllPllTracking::GalileoE5bDllPllTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << trk_params.item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/galileo_e6_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/galileo_e6_dll_pll_tracking.cc index 5fb8dfa82..d123ca2d3 100644 --- a/src/algorithms/tracking/adapters/galileo_e6_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/galileo_e6_dll_pll_tracking.cc @@ -61,7 +61,7 @@ GalileoE6DllPllTracking::GalileoE6DllPllTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << trk_params.item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_c_aid_tracking.cc b/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_c_aid_tracking.cc index 3f5814abd..3cb81f43c 100644 --- a/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_c_aid_tracking.cc +++ b/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_c_aid_tracking.cc @@ -95,7 +95,7 @@ GlonassL1CaDllPllCAidTracking::GlonassL1CaDllPllCAidTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << item_type_ << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_tracking.cc index 4d34b8da2..253f82774 100644 --- a/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/glonass_l1_ca_dll_pll_tracking.cc @@ -70,7 +70,7 @@ GlonassL1CaDllPllTracking::GlonassL1CaDllPllTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_c_aid_tracking.cc b/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_c_aid_tracking.cc index 061d2a064..1cd2f6cf1 100644 --- a/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_c_aid_tracking.cc +++ b/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_c_aid_tracking.cc @@ -93,7 +93,7 @@ GlonassL2CaDllPllCAidTracking::GlonassL2CaDllPllCAidTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << item_type_ << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_tracking.cc index 1d6759676..0ce3c1291 100644 --- a/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/glonass_l2_ca_dll_pll_tracking.cc @@ -68,7 +68,7 @@ GlonassL2CaDllPllTracking::GlonassL2CaDllPllTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.cc index 768888b12..7c35a1e3c 100644 --- a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.cc @@ -73,7 +73,7 @@ GpsL1CaDllPllTracking::GpsL1CaDllPllTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << trk_params.item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_gpu.cc b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_gpu.cc index 94001c8bd..0060b2ee1 100644 --- a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_gpu.cc +++ b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_gpu.cc @@ -72,7 +72,7 @@ GpsL1CaDllPllTrackingGPU::GpsL1CaDllPllTrackingGPU( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_kf_tracking.cc b/src/algorithms/tracking/adapters/gps_l1_ca_kf_tracking.cc index bba2cb308..a34cf388b 100644 --- a/src/algorithms/tracking/adapters/gps_l1_ca_kf_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l1_ca_kf_tracking.cc @@ -81,7 +81,7 @@ GpsL1CaKfTracking::GpsL1CaKfTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.cc b/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.cc index 4360ba61f..eb1ee936e 100644 --- a/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.cc @@ -60,7 +60,7 @@ GpsL1CaTcpConnectorTracking::GpsL1CaTcpConnectorTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << item_type << " unknown tracking item type."; } diff --git a/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.cc index fdfd11948..9c1b5aadd 100644 --- a/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.cc @@ -62,7 +62,7 @@ GpsL2MDllPllTracking::GpsL2MDllPllTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << trk_params.item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking.cc b/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking.cc index e14a01327..bea9b5b25 100644 --- a/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking.cc +++ b/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking.cc @@ -65,7 +65,7 @@ GpsL5DllPllTracking::GpsL5DllPllTracking( } else { - item_size_ = sizeof(gr_complex); + item_size_ = 0; LOG(WARNING) << trk_params.item_type << " unknown tracking item type."; } channel_ = 0; diff --git a/src/core/receiver/gnss_block_factory.cc b/src/core/receiver/gnss_block_factory.cc index 67ab07687..581ac7771 100644 --- a/src/core/receiver/gnss_block_factory.cc +++ b/src/core/receiver/gnss_block_factory.cc @@ -393,6 +393,11 @@ std::unique_ptr GNSSBlockFactory::GetChannel( { return nullptr; } + if (trk_->item_size() == 0) + { + LOG(ERROR) << trk_->role() << ".item_type=" << acq_item_type << " is not defined for implementation " << trk_->implementation(); + return nullptr; + } std::unique_ptr channel_ = std::make_unique(configuration, channel, std::move(acq_), diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc index d37970fbd..db7e7eeac 100644 --- a/src/core/receiver/gnss_flowgraph.cc +++ b/src/core/receiver/gnss_flowgraph.cc @@ -804,7 +804,7 @@ int GNSSFlowgraph::connect_channels() else { LOG(ERROR) << "Can't connect channel " << i << " internally"; - help_hint_ += " * Check implementation names for Channel" + std::to_string(i) + " inner blocks.\n"; + help_hint_ += " * Check your configuration for Channel" + std::to_string(i) + " inner blocks.\n"; help_hint_ += " Acquisition blocks documentation at https://gnss-sdr.org/docs/sp-blocks/acquisition/\n"; help_hint_ += " Tracking blocks documentation at https://gnss-sdr.org/docs/sp-blocks/tracking/\n"; help_hint_ += " Telemetry Decoder blocks documentation at https://gnss-sdr.org/docs/sp-blocks/telemetry-decoder/\n";