[MOAB-dev] r4836 - MOAB/trunk/src/io

kraftche at cae.wisc.edu kraftche at cae.wisc.edu
Tue May 17 11:26:58 CDT 2011


Author: kraftche
Date: 2011-05-17 11:26:57 -0500 (Tue, 17 May 2011)
New Revision: 4836

Modified:
   MOAB/trunk/src/io/ReadHDF5.cpp
Log:
add some checks to HDF5 reader

Modified: MOAB/trunk/src/io/ReadHDF5.cpp
===================================================================
--- MOAB/trunk/src/io/ReadHDF5.cpp	2011-05-17 13:25:17 UTC (rev 4835)
+++ MOAB/trunk/src/io/ReadHDF5.cpp	2011-05-17 16:26:57 UTC (rev 4836)
@@ -2111,7 +2111,7 @@
                                           hid_t contents_handle, 
                                           hid_t meta_type,
                                           hid_t content_type,
-                                          long /*contents_len*/,
+                                          long contents_len,
                                           Range& file_ids )
 {
 
@@ -2190,6 +2190,27 @@
     assert(rank == 0); // if not MPI, then only one proc
 #endif
   }
+  
+  // check offsets so that we don't read past end of table or
+  // walk off end of array.
+  long prev = -1;
+  for (long  i = 0; i < num_sets; ++i) {
+    if (offset_buffer[i] < prev) {
+      std::cerr << "Invalid data in set contents offsets at position "
+                << i << ": index " << offset_buffer[i] 
+                << " is less than previous index " << prev << std::endl;
+      std::cerr.flush();
+      MPI_Abort(comm,1);
+    }
+    prev = offset_buffer[i];
+  }
+  if (offset_buffer[num_sets-1] >= contents_len) {
+    std::cerr << "Maximum set content index " << offset_buffer[num_sets-1]
+              << " exceeds contents table length of " << contents_len
+              << std::endl;
+    std::cerr.flush();
+    MPI_Abort(comm,1);
+  }
 
   // set up buffer for reading set contents 
   long* const content_buffer = (long*)dataBuffer;












More information about the moab-dev mailing list