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