Blob Blame History Raw
From 1a5ee8c46a4a332fce997522560d7b9f6dbde547 Mon Sep 17 00:00:00 2001
From: Salvatore Filippone <salvatore.filippone@cranfield.ac.uk>
Date: Thu, 13 Sep 2018 14:21:52 +0100
Subject: [PATCH] Fix bounds computation in set_vect. Bug report by Alexandre
 Silva Lopes

---
 base/modules/serial/psb_c_base_vect_mod.f90 | 5 +++--
 base/modules/serial/psb_d_base_vect_mod.f90 | 5 +++--
 base/modules/serial/psb_i_base_vect_mod.f90 | 5 +++--
 base/modules/serial/psb_s_base_vect_mod.f90 | 5 +++--
 base/modules/serial/psb_z_base_vect_mod.f90 | 5 +++--
 5 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/base/modules/serial/psb_c_base_vect_mod.f90 b/base/modules/serial/psb_c_base_vect_mod.f90
index 6fa0bc70..54635a6d 100644
--- a/base/modules/serial/psb_c_base_vect_mod.f90
+++ b/base/modules/serial/psb_c_base_vect_mod.f90
@@ -749,9 +749,10 @@ subroutine c_base_set_vect(x,val,first,last)
         
     integer(psb_ipk_) :: info, first_, last_, nr
 
-    first_=1
-    last_=min(psb_size(x%v),size(val))
+
+    first_                     = 1
     if (present(first)) first_ = max(1,first)
+    last_                      = min(psb_size(x%v),first_+size(val)-1)
     if (present(last))  last_  = min(last,last_)
 
     if (allocated(x%v)) then 
diff --git a/base/modules/serial/psb_d_base_vect_mod.f90 b/base/modules/serial/psb_d_base_vect_mod.f90
index 36e95142..3ec2356a 100644
--- a/base/modules/serial/psb_d_base_vect_mod.f90
+++ b/base/modules/serial/psb_d_base_vect_mod.f90
@@ -749,9 +749,10 @@ subroutine d_base_set_vect(x,val,first,last)
         
     integer(psb_ipk_) :: info, first_, last_, nr
 
-    first_=1
-    last_=min(psb_size(x%v),size(val))
+
+    first_                     = 1
     if (present(first)) first_ = max(1,first)
+    last_                      = min(psb_size(x%v),first_+size(val)-1)
     if (present(last))  last_  = min(last,last_)
 
     if (allocated(x%v)) then 
diff --git a/base/modules/serial/psb_i_base_vect_mod.f90 b/base/modules/serial/psb_i_base_vect_mod.f90
index 4cc592ac..cdbe91e5 100644
--- a/base/modules/serial/psb_i_base_vect_mod.f90
+++ b/base/modules/serial/psb_i_base_vect_mod.f90
@@ -718,9 +718,10 @@ subroutine i_base_set_vect(x,val,first,last)
         
     integer(psb_ipk_) :: info, first_, last_, nr
 
-    first_=1
-    last_=min(psb_size(x%v),size(val))
+
+    first_                     = 1
     if (present(first)) first_ = max(1,first)
+    last_                      = min(psb_size(x%v),first_+size(val)-1)
     if (present(last))  last_  = min(last,last_)
 
     if (allocated(x%v)) then 
diff --git a/base/modules/serial/psb_s_base_vect_mod.f90 b/base/modules/serial/psb_s_base_vect_mod.f90
index 9ee77ea6..97c7c11e 100644
--- a/base/modules/serial/psb_s_base_vect_mod.f90
+++ b/base/modules/serial/psb_s_base_vect_mod.f90
@@ -749,9 +749,10 @@ subroutine s_base_set_vect(x,val,first,last)
         
     integer(psb_ipk_) :: info, first_, last_, nr
 
-    first_=1
-    last_=min(psb_size(x%v),size(val))
+
+    first_                     = 1
     if (present(first)) first_ = max(1,first)
+    last_                      = min(psb_size(x%v),first_+size(val)-1)
     if (present(last))  last_  = min(last,last_)
 
     if (allocated(x%v)) then 
diff --git a/base/modules/serial/psb_z_base_vect_mod.f90 b/base/modules/serial/psb_z_base_vect_mod.f90
index 0960624a..8c1b6baf 100644
--- a/base/modules/serial/psb_z_base_vect_mod.f90
+++ b/base/modules/serial/psb_z_base_vect_mod.f90
@@ -749,9 +749,10 @@ subroutine z_base_set_vect(x,val,first,last)
         
     integer(psb_ipk_) :: info, first_, last_, nr
 
-    first_=1
-    last_=min(psb_size(x%v),size(val))
+
+    first_                     = 1
     if (present(first)) first_ = max(1,first)
+    last_                      = min(psb_size(x%v),first_+size(val)-1)
     if (present(last))  last_  = min(last,last_)
 
     if (allocated(x%v)) then