GetRequestWithList fails in Gurux.DLMS.cpp with "segmentation fault" if some requested objects not in collection of AssociationView.
Here is the crash log:
01:40:56,252 : DEBUG : TX: 7E A0 1F 02 21 41 93 CC 30 81 80 12 05 01 F0 06 01 F0 07 04 00 00 00 01 08 04 00 00 00 01 F9 CB 7E
01:40:56,256 : INFO : <HDLC len="1E" >
<TargetAddress Value="90" />
<SourceAddress Value="20" />
<FrameType Value="93" />
<PDU>
<Snrm>
<MaxInfoTX Value="240" />
<MaxInfoRX Value="240" />
<WindowSizeTX Value="1" />
<WindowSizeRX Value="1" />
</Snrm></PDU>
</HDLC>
01:40:57,298 : DEBUG : RX: 7E A0 1F 41 02 21 73 B2 6D 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E
01:40:57,301 : INFO : <HDLC len="1E" >
<TargetAddress Value="20" />
<SourceAddress Value="90" />
<FrameType Value="73" />
<PDU>
<Ua>
<MaxInfoTX Value="128" />
<MaxInfoRX Value="128" />
<WindowSizeTX Value="1" />
<WindowSizeRX Value="1" />
</Ua></PDU>
</HDLC>
01:40:57,305 : DEBUG : TX: 7E A0 45 02 21 41 10 95 BF E6 E6 00 60 36 A1 09 06 07 60 85 74 05 08 01 01 8A 02 07 80 8B 07 60 85 74 05 08 02 01 AC 0A 80 08 70 61 73 73 77 6F 72 64 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 00 7E 1F FF FF DA 9C 7E
01:40:57,311 : INFO : <HDLC len="44" >
<TargetAddress Value="90" />
<SourceAddress Value="20" />
<FrameType Value="10" />
<PDU>
<AssociationRequest>
<ApplicationContextName Value="LN" />
<SenderACSERequirements Value="1" />
<MechanismName Value="Low" />
<CallingAuthentication Value="70617373776F7264" />
<InitiateRequest>
<ProposedDlmsVersionNumber Value="06" />
<ProposedConformance>
<ConformanceBit Name="PriorityMgmtSupported" />
<ConformanceBit Name="Attribute0SupportedWithGet" />
<ConformanceBit Name="BlockTransferWithGetOrRead" />
<ConformanceBit Name="BlockTransferWithSetOrWrite" />
<ConformanceBit Name="BlockTransferWithAction" />
<ConformanceBit Name="MultipleReferences" />
<ConformanceBit Name="Get" />
<ConformanceBit Name="Set" />
<ConformanceBit Name="SelectiveAccess" />
<ConformanceBit Name="EventNotification" />
<ConformanceBit Name="Action" />
</ProposedConformance>
<ProposedMaxPduSize Value="FFFF" />
</InitiateRequest>
</AssociationRequest>
</PDU>
</HDLC>
01:40:57,420 : DEBUG : RX: 7E A0 38 41 02 21 30 60 4D E6 E7 00 61 29 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 00 A3 05 A1 03 02 01 00 BE 10 04 0E 08 00 06 5F 1F 04 00 00 1E 1D 02 00 00 07 7A ED 7E
01:40:57,424 : INFO : <HDLC len="37" >
<TargetAddress Value="20" />
<SourceAddress Value="90" />
<FrameType Value="30" />
<PDU>
<AssociationResponse>
<ApplicationContextName Value="LN" />
<AssociationResult Value="00" />
<ResultSourceDiagnostic>
<ACSEServiceUser Value="00" />
</ResultSourceDiagnostic>
<InitiateResponse>
<NegotiatedDlmsVersionNumber Value="06" />
<NegotiatedConformance>
<ConformanceBit Name="BlockTransferWithGetOrRead" />
<ConformanceBit Name="BlockTransferWithSetOrWrite" />
<ConformanceBit Name="BlockTransferWithAction" />
<ConformanceBit Name="MultipleReferences" />
<ConformanceBit Name="Get" />
<ConformanceBit Name="Set" />
<ConformanceBit Name="SelectiveAccess" />
<ConformanceBit Name="Action" />
</NegotiatedConformance>
<NegotiatedMaxPduSize Value="0200" />
<VaaName Value="0007" />
</InitiateResponse>
</AssociationResponse>
</PDU>
</HDLC>
01:40:57,432 : DEBUG : TX: 7E A0 75 02 21 41 32 54 69 E6 E6 00 C0 03 41 0A 00 01 00 00 60 01 01 FF 02 00 00 01 00 00 60 01 00 FF 02 00 00 01 00 00 60 01 02 FF 02 00 00 01 00 00 60 01 06 FF 02 00 00 01 01 00 00 04 02 FF 02 00 00 01 01 00 00 04 03 FF 02 00 00 03 01 00 00 06 00 FF 02 00 00 03 01 00 0C 23 00 FF 02 00 00 03 01 00 0C 1F 00 FF 02 00 00 03 01 00 0C 27 00 FF 02 00 36 58 7E
01:40:57,445 : INFO : <HDLC len="74" >
<TargetAddress Value="90" />
<SourceAddress Value="20" />
<FrameType Value="32" />
<PDU>
<GetRequest>
<GetRequestWithList>
<InvokeIdAndPriority Value="41" />
<AttributeDescriptorList Qty="0A" >
<AttributeDescriptorWithSelection>
<AttributeDescriptor>
<ClassId Value="0001" />
<InstanceId Value="0000600101FF" />
<AttributeId Value="02" />
</AttributeDescriptor>
</AttributeDescriptorWithSelection>
<AttributeDescriptorWithSelection>
<AttributeDescriptor>
<ClassId Value="0001" />
<InstanceId Value="0000600100FF" />
<AttributeId Value="02" />
</AttributeDescriptor>
</AttributeDescriptorWithSelection>
<AttributeDescriptorWithSelection>
<AttributeDescriptor>
<ClassId Value="0001" />
<InstanceId Value="0000600102FF" />
<AttributeId Value="02" />
</AttributeDescriptor>
</AttributeDescriptorWithSelection>
<AttributeDescriptorWithSelection>
<AttributeDescriptor>
<ClassId Value="0001" />
<InstanceId Value="0000600106FF" />
<AttributeId Value="02" />
</AttributeDescriptor>
</AttributeDescriptorWithSelection>
<AttributeDescriptorWithSelection>
<AttributeDescriptor>
<ClassId Value="0001" />
<InstanceId Value="0100000402FF" />
<AttributeId Value="02" />
</AttributeDescriptor>
</AttributeDescriptorWithSelection>
<AttributeDescriptorWithSelection>
<AttributeDescriptor>
<ClassId Value="0001" />
<InstanceId Value="0100000403FF" />
<AttributeId Value="02" />
</AttributeDescriptor>
</AttributeDescriptorWithSelection>
<AttributeDescriptorWithSelection>
<AttributeDescriptor>
<ClassId Value="0003" />
<InstanceId Value="0100000600FF" />
<AttributeId Value="02" />
</AttributeDescriptor>
</AttributeDescriptorWithSelection>
<AttributeDescriptorWithSelection>
<AttributeDescriptor>
<ClassId Value="0003" />
<InstanceId Value="01000C2300FF" />
<AttributeId Value="02" />
</AttributeDescriptor>
</AttributeDescriptorWithSelection>
<AttributeDescriptorWithSelection>
<AttributeDescriptor>
<ClassId Value="0003" />
<InstanceId Value="01000C1F00FF" />
<AttributeId Value="02" />
</AttributeDescriptor>
</AttributeDescriptorWithSelection>
<AttributeDescriptorWithSelection>
<AttributeDescriptor>
<ClassId Value="0003" />
<InstanceId Value="01000C2700FF" />
<AttributeId Value="02" />
</AttributeDescriptor>
</AttributeDescriptorWithSelection>
</AttributeDescriptorList>
</GetRequestWithList>
</GetRequest>
</PDU>
</HDLC>
As I see error goes from GXByteBuffer....
If object not exists…
If object not exists GetRequestWithList() try to refer NULL pointer after PreRead() was called.