From 117e8dcce8f0b1cefa07bd9f0a05d01c8ce1a409 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 15 Jan 2025 12:18:00 -0700 Subject: [PATCH] liberty seg fault when missing template and axis values Signed-off-by: James Cherry --- liberty/LibertyReader.cc | 16 +++++++++++----- liberty/LibertyReaderPvt.hh | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index 1492b468..70b314ea 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -4658,9 +4658,9 @@ LibertyReader::makeTable(LibertyAttr *attr, float scale) { if (attr->isComplex()) { - makeTableAxis(0); - makeTableAxis(1); - makeTableAxis(2); + makeTableAxis(0, attr); + makeTableAxis(1, attr); + makeTableAxis(2, attr); if (axis_[0] && axis_[1] && axis_[2]) { // 3D table // Column index1*size(index2) + index2 @@ -4685,7 +4685,7 @@ LibertyReader::makeTable(LibertyAttr *attr, delete table; table_ = make_shared(values, axis_[0]); } - else { + else if (axis_[0] == nullptr && axis_[1] == nullptr && axis_[2] == nullptr) { // scalar FloatTable *table = makeFloatTable(attr, 1, 1, scale); float value = (*(*table)[0])[0]; @@ -4747,7 +4747,8 @@ LibertyReader::makeFloatTable(LibertyAttr *attr, } void -LibertyReader::makeTableAxis(int index) +LibertyReader::makeTableAxis(int index, + LibertyAttr *attr) { if (axis_values_[index]) { TableAxisVariable var = axis_[index]->variable(); @@ -4757,6 +4758,11 @@ LibertyReader::makeTableAxis(int index) scaleFloats(values, scale); axis_[index] = make_shared(var, values); } + else if (axis_[index] && axis_[index]->values() == nullptr) { + libWarn(1344, attr, "Table axis and template missing values."); + axis_[index] = nullptr; + axis_values_[index] = nullptr; + } } //////////////////////////////////////////////////////////////// diff --git a/liberty/LibertyReaderPvt.hh b/liberty/LibertyReaderPvt.hh index 0aa67303..17075187 100644 --- a/liberty/LibertyReaderPvt.hh +++ b/liberty/LibertyReaderPvt.hh @@ -524,7 +524,8 @@ protected: LibraryAttrVisitor visitor); void parseNames(const char *name_str); void clearAxisValues(); - void makeTableAxis(int index); + void makeTableAxis(int index, + LibertyAttr *attr); StringSeq *parseNameList(const char *name_list); StdStringSeq parseTokenList(const char *token_str,