diff --git a/releasenotes/notes/fix_mps_size_estimator-0dcf387fd870f5e5.yaml b/releasenotes/notes/fix_mps_size_estimator-0dcf387fd870f5e5.yaml new file mode 100644 index 000000000..8481135ba --- /dev/null +++ b/releasenotes/notes/fix_mps_size_estimator-0dcf387fd870f5e5.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + SIGSEGV raised when the circuits with unsupported gates is + passed to MPS simulator, because of `std::set.find()` in + size estimator for MPS. + This fix avoids SIGSEGV if unsupported gates is passed. diff --git a/src/simulators/matrix_product_state/matrix_product_state_size_estimator.hpp b/src/simulators/matrix_product_state/matrix_product_state_size_estimator.hpp index dc86812d9..6a5b6022b 100644 --- a/src/simulators/matrix_product_state/matrix_product_state_size_estimator.hpp +++ b/src/simulators/matrix_product_state/matrix_product_state_size_estimator.hpp @@ -74,17 +74,19 @@ uint_t MPSSizeEstimator::estimate(const std::vector &ops, case Operations::OpType::gate: if (ops[i].qubits.size() > 1) { auto it = gateset.find(ops[i].name); - switch (it->second) { - case Gates::rxx: - case Gates::ryy: - case Gates::rzx: - pi2 = std::real(ops[i].params[0]) / M_PI; - pi2_int = (double)std::round(pi2); - if (!AER::Linalg::almost_equal(pi2, pi2_int)) - apply_qubits(ops[i].qubits); - break; - default: - break; + if (it != gateset.end()) { + switch (it->second) { + case Gates::rxx: + case Gates::ryy: + case Gates::rzx: + pi2 = std::real(ops[i].params[0]) / M_PI; + pi2_int = (double)std::round(pi2); + if (!AER::Linalg::almost_equal(pi2, pi2_int)) + apply_qubits(ops[i].qubits); + break; + default: + break; + } } } break;