From b643d81c7c0392ee133b12b1bdaf303e8f492eb3 Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Tue, 11 May 2010 08:08:45 +0000 Subject: [PATCH] Fix, Bounds check for AlignedRegion and AlignedColumn git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2229 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/seq/base/src/aligned_column.cc | 11 +++++++++++ modules/seq/base/src/aligned_column.hh | 2 ++ modules/seq/base/src/aligned_region.cc | 6 +++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/seq/base/src/aligned_column.cc b/modules/seq/base/src/aligned_column.cc index 8f5f1081c..e07e828b5 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 2ea6e5cca..75bdf6fd3 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 3db9d1430..fc4a3c6d6 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 -- GitLab