diff --git a/Framework/NexusGeometry/src/NexusGeometryParser.cpp b/Framework/NexusGeometry/src/NexusGeometryParser.cpp index b051e8bd49575a174d0e9eba3c6a6bfbf9b34038..531bc350a841ef6accc1b1d96a01cfe01d7af4dc 100644 --- a/Framework/NexusGeometry/src/NexusGeometryParser.cpp +++ b/Framework/NexusGeometry/src/NexusGeometryParser.cpp @@ -155,10 +155,21 @@ private: auto nCharacters = dataType.getSize(); std::vector<char> value(nCharacters); data.read(value.data(), dataType, data.getSpace()); - return std::string(value.begin(), value.end()); + auto str = std::string(value.begin(), value.end()); + str.erase(std::find(str.begin(), str.end(), '\0'), str.end()); + return str; } } + // Provided to support invalid or null-termination character strings + std::string readOrSubsitute(const std::string &dataset, const Group &group, + std::string &substitue) { + auto read = get1DStringDataset(dataset, group); + if (read.empty()) + read = substitue; + return read; + } + /** Open subgroups of parent group * If firstEntryOnly=true, only the first match is returned as a vector of * size 1. @@ -589,7 +600,7 @@ private: Group sourceGroup = utilities::findGroupOrThrow(instrumentGroup, NX_SOURCE); std::string sourceName = "Unspecfied"; if (utilities::findDataset(sourceGroup, "name")) - sourceName = get1DStringDataset("name", sourceGroup); + sourceName = readOrSubsitute("name", sourceGroup, sourceName); auto sourceTransformations = getTransformations(file, sourceGroup); auto defaultPos = Eigen::Vector3d(0.0, 0.0, 0.0); builder.addSource(sourceName, sourceTransformations * defaultPos); @@ -605,7 +616,7 @@ private: sampleTransforms * Eigen::Vector3d(0.0, 0.0, 0.0); std::string sampleName = "Unspecified"; if (utilities::findDataset(sampleGroup, "name")) - sampleName = get1DStringDataset("name", sampleGroup); + sampleName = readOrSubsitute("name", sampleGroup, sampleName); builder.addSample(sampleName, samplePos); }