diff --git a/modules/seq/base/src/aligned_column.cc b/modules/seq/base/src/aligned_column.cc index 8f5f1081c09633766b8ede9797807af8a7e29bd2..e07e828b5d91b685aef767d574f72223b37d12d9 100644 --- a/modules/seq/base/src/aligned_column.cc +++ b/modules/seq/base/src/aligned_column.cc @@ -38,16 +38,19 @@ int AlignedColumn::GetIndex() const char AlignedColumn::operator[](int row) const { + this->CheckRowValidity(row); return aln_.GetOneLetterCode(row, index_); } int AlignedColumn::GetResidueIndex(int row) const { + this->CheckRowValidity(row); return aln_.GetResidueIndex(row, index_); } mol::ResidueView AlignedColumn::GetResidue(int row) const { + this->CheckRowValidity(row); return aln_.GetResidue(row, index_); } @@ -64,4 +67,12 @@ int AlignedColumn::GetRowCount() const return aln_.GetCount(); } +void AlignedColumn::CheckRowValidity(int row) const +{ + if(row<0 || row>=this->GetRowCount()){ + throw std::out_of_range("Row out of bounds"); + } +} + + }} diff --git a/modules/seq/base/src/aligned_column.hh b/modules/seq/base/src/aligned_column.hh index 2ea6e5ccabc87da2a559e19cd678b52dd7d49688..75bdf6fd31cd174458166887fc7d03e53edc5621 100644 --- a/modules/seq/base/src/aligned_column.hh +++ b/modules/seq/base/src/aligned_column.hh @@ -55,6 +55,8 @@ public: /// \sa AlignmentHandle::GetResidue() mol::ResidueView GetResidue(int row) const; private: + void CheckRowValidity(int row) const; + AlignmentHandle aln_; int index_; }; diff --git a/modules/seq/base/src/aligned_region.cc b/modules/seq/base/src/aligned_region.cc index 3db9d14300fd53c4495c6c2df6c041197e05978f..fc4a3c6d69b41513e43ffdde09e1809b27a391a0 100644 --- a/modules/seq/base/src/aligned_region.cc +++ b/modules/seq/base/src/aligned_region.cc @@ -94,7 +94,11 @@ AlignedColumnIterator AlignedRegion::end() AlignedColumn AlignedRegion::operator[](int index) const { - return AlignedColumn(aln_, start_+index); + int col_index = start_+index; + if(col_index<start_ || col_index>=end_){ + throw std::out_of_range("Index out of region"); + } + return AlignedColumn(aln_, col_index); } bool AlignedRegion::operator==(const AlignedRegion& rhs) const