Index: sources/view/td/data/VTreatmentRanges.cpp =================================================================== diff -u -r1164ea502e3fabdb55aa41923e0e566505f197ef -r863906f104a18dbe6020b939b739214679d49d8a --- sources/view/td/data/VTreatmentRanges.cpp (.../VTreatmentRanges.cpp) (revision 1164ea502e3fabdb55aa41923e0e566505f197ef) +++ sources/view/td/data/VTreatmentRanges.cpp (.../VTreatmentRanges.cpp) (revision 863906f104a18dbe6020b939b739214679d49d8a) @@ -121,19 +121,48 @@ */ void View::VTreatmentRanges::doPopulateAcidConcentrate (const int &vSet, const int &vIndex) { + QString mAcidConcentrate; + QStringList values; + bool ok1 = false; + bool ok2 = false; + float potassiumValue = 0; + float calciumValue = 0; + enum AcidConcentrates { ePotassium , eCalcium , eMagnesium , }; - if ( ! vSet ) { return; } + static const QRegularExpression splitRegex("[^0-9.]"); - QString mAcidConcentrate =_acidConcentrateOptions[vIndex]; - QStringList values = mAcidConcentrate.split(QRegExp("[^0-9.]"), Qt::SkipEmptyParts); - potassium (values.value(AcidConcentrates::ePotassium) .toFloat()); - calcium (values.value(AcidConcentrates::eCalcium) .toFloat()); - didPopulateAcidConcentrate(); + if ( ! vSet ) goto lOut; + + // Check vIndex out of range + if ( vIndex < 0 || + vIndex >= _acidConcentrateOptions.size()) goto lOut; + + mAcidConcentrate =_acidConcentrateOptions.at(vIndex); + values = mAcidConcentrate.split(splitRegex, Qt::SkipEmptyParts); + + // Check string missing numbers + if ( values.size() < 2 ) goto lOut; + + ok1 = false; + ok2 = false; + potassiumValue = values.value(AcidConcentrates::ePotassium) .toFloat(&ok1); + calciumValue = values.value(AcidConcentrates::eCalcium) .toFloat(&ok2); + + // check float conversion + if ( ! ok1 || ! ok2 ) goto lOut; + + potassium(potassiumValue); + calcium(calciumValue); + + emit didPopulateAcidConcentrate(); + +lOut: + return; } /*!