Fix various bugs in HDF5 interface / MGXS code (found by valgrind)

This commit is contained in:
Paul Romano 2018-09-24 13:29:11 -05:00
parent 2afb1249b2
commit e2ed9c7553
3 changed files with 10 additions and 6 deletions

View file

@ -193,13 +193,13 @@ read_attribute(hid_t obj_id, const char* name, std::vector<std::string>& vec)
// Allocate a C char array to get strings
auto n = attribute_typesize(obj_id, name);
char buffer[m][n+1];
char buffer[m][n];
// Read char data in attribute
read_attr_string(obj_id, name, n, buffer[0]);
for (int i = 0; i < m; ++i) {
vec.emplace_back(&buffer[i][0]);
vec.emplace_back(&buffer[i][0], n);
}
}

View file

@ -392,7 +392,7 @@ object_name(hid_t obj_id)
// Read and return name
H5Iget_name(obj_id, buffer, size);
return {buffer, size};
return buffer;
}
@ -439,7 +439,9 @@ read_attr_string(hid_t obj_id, const char* name, size_t slen, char* buffer)
{
// Create datatype for a string
hid_t datatype = H5Tcopy(H5T_C_S1);
H5Tset_size(datatype, slen + 1);
H5Tset_size(datatype, slen);
// numpy uses null-padding when writing fixed-length strings
H5Tset_strpad(datatype, H5T_STR_NULLPAD);
// Read data into buffer
read_attr(obj_id, name, datatype, buffer);
@ -503,7 +505,9 @@ read_string(hid_t obj_id, const char* name, size_t slen, char* buffer, bool inde
{
// Create datatype for a string
hid_t datatype = H5Tcopy(H5T_C_S1);
H5Tset_size(datatype, slen + 1);
H5Tset_size(datatype, slen);
// numpy uses null-padding when writing fixed-length strings
H5Tset_strpad(datatype, H5T_STR_NULLPAD);
// Read data into buffer
read_dataset(obj_id, name, datatype, buffer, indep);

View file

@ -208,7 +208,7 @@ void
get_name_c(int index, int name_len, char* name)
{
// First blank out our input string
std::string str(name_len, ' ');
std::string str(name_len - 1, ' ');
std::strcpy(name, str.c_str());
// Now get the data and copy to the C-string