From d37ab9ba2ae8a2c448fe8ab9d6dbb239b6d1e64d Mon Sep 17 00:00:00 2001 From: Adrian Roman Date: Sat, 25 Jan 2025 15:08:45 +0200 Subject: [PATCH] Fix for https://github.com/Qiskit/qiskit-aer/issues/2291 --- .../aggregate_operations-crash-c262132ba430972d.yaml | 9 +++++++++ src/transpile/fusion.hpp | 3 +++ 2 files changed, 12 insertions(+) create mode 100644 releasenotes/notes/aggregate_operations-crash-c262132ba430972d.yaml diff --git a/releasenotes/notes/aggregate_operations-crash-c262132ba430972d.yaml b/releasenotes/notes/aggregate_operations-crash-c262132ba430972d.yaml new file mode 100644 index 0000000000..692d5ce766 --- /dev/null +++ b/releasenotes/notes/aggregate_operations-crash-c262132ba430972d.yaml @@ -0,0 +1,9 @@ +--- +prelude: > + DiagonalFusion::aggregate_operations could crash in some circumstances +fixes: + - | + Sometimes `DiagonalFuson::get_next_deagonal_end` had an invalid `from` + parameter. Now it has a check to return -1 in such a case. For more + details refer to: `#2291 ` + diff --git a/src/transpile/fusion.hpp b/src/transpile/fusion.hpp index 10dbccaeae..a4d0cefda0 100644 --- a/src/transpile/fusion.hpp +++ b/src/transpile/fusion.hpp @@ -579,6 +579,9 @@ int DiagonalFusion::get_next_diagonal_end( const oplist_t &ops, const int from, const int end, std::set &fusing_qubits) const { + if (ops.size() <= from) + return -1; + if (is_diagonal_op(ops[from])) { for (const auto qubit : ops[from].qubits) fusing_qubits.insert(qubit);