From 78c4a1568eab93984a458a9ee6fe9646b6d4e945 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Wed, 13 Jan 2021 12:17:30 +0100 Subject: [PATCH] #7198 Fix crash in new_summary_plot.py --- .../cafPdmFieldScriptingCapability.h | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapability.h b/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapability.h index d8ed8a345c..ade1911a70 100644 --- a/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapability.h +++ b/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapability.h @@ -277,6 +277,8 @@ struct PdmFieldScriptingCapabilityIOHandler> QChar chr = errorMessageContainer->readCharWithLineNumberCount( inputStream ); if ( chr == QChar( '[' ) ) { + std::vector allValues; + QString currentValue; while ( !inputStream.atEnd() ) { errorMessageContainer->skipWhiteSpaceWithLineNumberCount( inputStream ); @@ -290,14 +292,25 @@ struct PdmFieldScriptingCapabilityIOHandler> { nextChar = errorMessageContainer->readCharWithLineNumberCount( inputStream ); errorMessageContainer->skipWhiteSpaceWithLineNumberCount( inputStream ); + if ( !currentValue.isEmpty() ) allValues.push_back( currentValue ); + currentValue = ""; } + else + { + currentValue += errorMessageContainer->readCharWithLineNumberCount( inputStream ); + } + } + if ( !currentValue.isEmpty() ) allValues.push_back( currentValue ); - T* value; - PdmFieldScriptingCapabilityIOHandler::writeToField( value, + for ( QString textValue : allValues ) + { + QTextStream singleValueStream( &textValue, QIODevice::ReadOnly ); + T* singleValue; + PdmFieldScriptingCapabilityIOHandler::writeToField( singleValue, allObjectsOfType, - inputStream, + singleValueStream, errorMessageContainer ); - fieldValue.push_back( value ); + fieldValue.push_back( singleValue ); } } else @@ -356,15 +369,16 @@ struct PdmFieldScriptingCapabilityIOHandler if ( fieldString.isEmpty() ) return; QStringList classAndAddress = fieldString.split( ":" ); - CAF_ASSERT( classAndAddress.size() == 2 ); - - qulonglong address = classAndAddress[1].toULongLong(); - for ( DataType* object : allObjectsOfType ) + if ( classAndAddress.size() == 2 ) { - if ( reinterpret_cast( object ) == address ) + qulonglong address = classAndAddress[1].toULongLong(); + for ( DataType* object : allObjectsOfType ) { - fieldValue = object; - break; + if ( reinterpret_cast( object ) == address ) + { + fieldValue = object; + break; + } } } }