From a34c38c9b9d5fa41572ad78f42652bc5594f1194 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 6 Jan 2016 12:56:27 -0500 Subject: [PATCH 1/2] getSubField -> getSubFieldT to avoid potential NULL de-ref. --- src/copy/pvCopy.cpp | 7 +++---- src/factory/StandardPVField.cpp | 4 ++-- src/pvMisc/bitSetUtil.cpp | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/copy/pvCopy.cpp b/src/copy/pvCopy.cpp index a80b6e4..98e525f 100644 --- a/src/copy/pvCopy.cpp +++ b/src/copy/pvCopy.cpp @@ -348,7 +348,7 @@ bool PVCopy::init(epics::pvData::PVStructurePtr const &pvRequest) if(len==string::npos) entireMaster = true; if(len==0) entireMaster = true; PVStructurePtr pvOptions; - if(len==1 && pvRequest->getSubField("_options")) { + if(len==1 && pvRequest->getSubField("_options")) { pvOptions = pvRequest->getSubField("_options"); } if(entireMaster) { @@ -441,8 +441,7 @@ CopyNodePtr PVCopy::createStructureNodes( PVFieldPtr copyPVField = copyPVFields[i]; string fieldName = copyPVField->getFieldName(); - PVStructurePtr requestPVStructure = static_pointer_cast( - pvFromRequest->getSubField(fieldName)); + PVStructurePtr requestPVStructure = pvFromRequest->getSubField(fieldName); PVStructurePtr pvSubFieldOptions; PVFieldPtr pvField = requestPVStructure->getSubField("_options"); if(pvField) pvSubFieldOptions = static_pointer_cast(pvField); @@ -551,7 +550,7 @@ void PVCopy::updateStructureNodeFromBitSet( CopyNodePtrArrayPtr nodes = structureNode->nodes; for(size_t i=0; isize(); i++) { CopyNodePtr node = (*nodes)[i]; - PVFieldPtr pvField = pvCopy->getSubField(node->structureOffset); + PVFieldPtr pvField = pvCopy->getSubFieldT(node->structureOffset); if(node->isStructure) { PVStructurePtr xxx = static_pointer_cast(pvField); CopyStructureNodePtr subStructureNode = diff --git a/src/factory/StandardPVField.cpp b/src/factory/StandardPVField.cpp index 2037e6b..d26917c 100644 --- a/src/factory/StandardPVField.cpp +++ b/src/factory/StandardPVField.cpp @@ -68,7 +68,7 @@ PVStructurePtr StandardPVField::enumerated(StringArray const &choices) PVStructurePtr pvStructure = pvDataCreate->createPVStructure(field); PVStringArray::svector cdata(choices.size()); std::copy(choices.begin(), choices.end(), cdata.begin()); - pvStructure->getSubField("choices")->replace(freeze(cdata)); + pvStructure->getSubFieldT("choices")->replace(freeze(cdata)); return pvStructure; } @@ -79,7 +79,7 @@ PVStructurePtr StandardPVField::enumerated( PVStructurePtr pvStructure = pvDataCreate->createPVStructure(field); PVStringArray::svector cdata(choices.size()); std::copy(choices.begin(), choices.end(), cdata.begin()); - pvStructure->getSubField("value.choices")->replace(freeze(cdata)); + pvStructure->getSubFieldT("value.choices")->replace(freeze(cdata)); return pvStructure; } diff --git a/src/pvMisc/bitSetUtil.cpp b/src/pvMisc/bitSetUtil.cpp index 2a5d493..4a934bd 100644 --- a/src/pvMisc/bitSetUtil.cpp +++ b/src/pvMisc/bitSetUtil.cpp @@ -38,7 +38,7 @@ static bool checkBitSetPVField( PVStructurePtr pvStructure = static_pointer_cast(pvField); offset = static_cast(pvStructure->getFieldOffset()) + 1; while(offsetgetSubField(offset); + PVFieldPtr pvSubField = pvStructure->getSubFieldT(offset); int32 nbitsNow = static_cast(pvSubField->getNumberFields()); if(nbitsNow==1) { if(bitSet->get(offset)) { From 93c7a05dac846baaf76a1a9152aa2220b1e8edb4 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Mon, 25 Jan 2016 13:14:48 -0500 Subject: [PATCH 2/2] remove redundant getSubField --- src/copy/pvCopy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/copy/pvCopy.cpp b/src/copy/pvCopy.cpp index 98e525f..c605dd8 100644 --- a/src/copy/pvCopy.cpp +++ b/src/copy/pvCopy.cpp @@ -348,7 +348,7 @@ bool PVCopy::init(epics::pvData::PVStructurePtr const &pvRequest) if(len==string::npos) entireMaster = true; if(len==0) entireMaster = true; PVStructurePtr pvOptions; - if(len==1 && pvRequest->getSubField("_options")) { + if(len==1) { pvOptions = pvRequest->getSubField("_options"); } if(entireMaster) {