Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use the size argument to check we are not out of bounds
authordegomme <augustin.degomme@unibas.ch>
Tue, 7 Mar 2017 23:00:35 +0000 (00:00 +0100)
committerdegomme <augustin.degomme@unibas.ch>
Tue, 7 Mar 2017 23:00:46 +0000 (00:00 +0100)
Otherwise clang whines that it's useless.

src/smpi/smpi_win.cpp

index 0f8f5c2..86646a9 100644 (file)
@@ -125,6 +125,9 @@ int Win::put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
   //get receiver pointer
   MPI_Win recv_win = connected_wins_[target_rank];
 
+  if(target_count*smpi_datatype_get_extent(target_datatype)>recv_win->size_)
+    return MPI_ERR_ARG;
+
   void* recv_addr = static_cast<void*> ( static_cast<char*>(recv_win->base_) + target_disp * recv_win->disp_unit_);
   XBT_DEBUG("Entering MPI_Put to %d", target_rank);
 
@@ -163,6 +166,9 @@ int Win::get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
   //get sender pointer
   MPI_Win send_win = connected_wins_[target_rank];
 
+  if(target_count*smpi_datatype_get_extent(target_datatype)>send_win->size_)
+    return MPI_ERR_ARG;
+
   void* send_addr = static_cast<void*>(static_cast<char*>(send_win->base_) + target_disp * send_win->disp_unit_);
   XBT_DEBUG("Entering MPI_Get from %d", target_rank);
 
@@ -207,6 +213,9 @@ int Win::accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_da
   //get receiver pointer
   MPI_Win recv_win = connected_wins_[target_rank];
 
+  if(target_count*smpi_datatype_get_extent(target_datatype)>recv_win->size_)
+    return MPI_ERR_ARG;
+
   void* recv_addr = static_cast<void*>(static_cast<char*>(recv_win->base_) + target_disp * recv_win->disp_unit_);
   XBT_DEBUG("Entering MPI_Accumulate to %d", target_rank);
     //As the tag will be used for ordering of the operations, add count to it