Could you file an issue on our GitHub project
<https://github.com/protocolbuffers/protobuf/>? From what I understand, map
fields are represented in a special way when they are accessed reflectively
and there is some special logic for syncing the reflection representation
with the ordinary representation. That logic is a bit complicated so it is
possible there is a bug somewhere.

On Sat, Jun 8, 2019 at 12:24 PM Suganthi chinnappan <
[email protected]> wrote:

> Hello experts,
>     I am using protobuf library to report KPIs for my project. It cores in
> SerializationToString() under load. While running under valgrind, i found
> Invalid Read in protobuf code. My application is single threaded.
>  I use Reflection API to set/reset values in Map.
>
>
> *Here is my proto file.*
> message Hi2IriStatsData
> {
>     message PerCFStats
>     {
>         string cfid = 1;                 // The CFID
>         uint32 ifid = 2;                 // The IFID
>         string cftype = 3;               // The CF TYPE (as configured in
> the CF MO table).
>         string destip = 4;
>         string destport = 5;
>         uint32 total_lisco_rcvd = 10;
>         uint32 curr_lisco_rcvd  = 11;
>         uint32 total_iri_dlvd = 30;
>         uint32 curr_iri_dlvd  = 31;
>         uint32 total_iri_dropped = 40;
>         uint32 curr_iri_dropped  = 41;
>         uint32 total_calls_dlvd  = 50;
>
>         uint32 curr_calls_dlvd   = 51;
>
>
>         int32  hi2_connections   = 90;
>         google.protobuf.Timestamp last_iri_dlvd_time = 110;
>     }
>
>     message PerTargetStats
>     {
>         string coid     = 1;
>         uint32 tid      = 2;
>         string caseid   = 3;
>         uint32 curr_iri_dlvd    = 40;
>         uint32 curr_iri_dropped = 41;
>         uint32 curr_calls_dlvd  = 50;
>     }
>
>     /* These are the stats */
>     map<string, PerCFStats>      cf_stats  = 1;  // Key is <CFID IFID>
> (i.e. cfid space and ifid)
>     map<string, PerTargetStats>  tgt_stats = 5;  // Key is <coid tid>
> (i.e. coid space and tid)
> }
>
>
> *Here is my core dump*
> Process terminating with default action of signal 6 (SIGABRT): dumping core
> ==13113==    at 0xC0D2207: raise (in /usr/lib64/libc-2.17.so)
> ==13113==    by 0xC0D38F7: abort (in /usr/lib64/libc-2.17.so)
> ==13113==    by 0xB8DD7D4: __gnu_cxx::__verbose_terminate_handler() (in
> /usr/lib64/libstdc++.so.6.0.19)
> ==13113==    by 0xB8DB745: ??? (in /usr/lib64/libstdc++.so.6.0.19)
> ==13113==    by 0xB8DB772: std::terminate() (in
> /usr/lib64/libstdc++.so.6.0.19)
> ==13113==    by 0xB8DC2DE: __cxa_pure_virtual (in
> /usr/lib64/libstdc++.so.6.0.19)
> ==13113==    by 0x54F9DE: GetCachedSize (map_type_handler.h:324)
> ==13113==    by 0x54F9DE:
> google::protobuf::internal::MapEntryImpl<hi2iristats::common::Hi2IriStatsData_CfStatsEntry_DoNotUse,
> google::protobuf::Message, std::string,
> hi2iristats::common::Hi2IriStatsData_PerCFStats,
> (google::protobuf::internal::WireFormatLite::FieldType)9,
> (google::protobuf::internal::WireFormatLite::FieldType)11,
> 0>::GetCachedSize() const (map_entry_lite.h:257)
> ==13113==    by 0x5441C1:
> InternalWriteMessageNoVirtualToArray<hi2iristats::common::Hi2IriStatsData_CfStatsEntry_DoNotUse>
> (wire_format_lite_inl.h:979)
> ==13113==    by 0x5441C1:
> hi2iristats::common::Hi2IriStatsData::InternalSerializeWithCachedSizesToArray(bool,
> unsigned char*) const (kpi_hi2_iridata.pb.cc:1968)
> ==13113==    by 0x73797A4:
> google::protobuf::MessageLite::AppendPartialToString(std::string*) const
> (message_lite.cc:296)
> ==13113==    by 0x5188C9: KpiData::buildKpi(std::string&) (KpiData.C:384)
> ==13113==    by 0x50F0F3: KpiClientMgr::buildKpi(std::string&)
> (KpiClientMgr.C:731)
> ==13113==    by 0x50F1E3: KpiClientMgr::buildPayload(std::string&)
> (KpiClientMgr.C:695)
>
>
> *Here is my valgrind report.*
>
> ==13113==* Invalid read of size 8*
> ==13113==    at 0x54F9D6: GetCachedSize (map_type_handler.h:324)
> ==13113==    by 0x54F9D6:
> google::protobuf::internal::MapEntryImpl<hi2iristats::common::Hi2IriStatsData_CfStatsEntry_DoNotUse,
> google::protobuf::Message, std::string,
> hi2iristats::common::Hi2IriStatsData_PerCFStats,
> (google::protobuf::internal::WireFormatLite::FieldType)9,
> (google::protobuf::internal::WireFormatLite::FieldType)11,
> 0>::GetCachedSize() const (map_entry_lite.h:257)
> ==13113==    by 0x5441C1:
> InternalWriteMessageNoVirtualToArray<hi2iristats::common::Hi2IriStatsData_CfStatsEntry_DoNotUse>
> (wire_format_lite_inl.h:979)
> ==13113==    by 0x5441C1:
> hi2iristats::common::Hi2IriStatsData::InternalSerializeWithCachedSizesToArray(bool,
> unsigned char*) const (kpi_hi2_iridata.pb.cc:1968)
> ==13113==    by 0x73797A4:
> google::protobuf::MessageLite::AppendPartialToString(std::string*) const
> (message_lite.cc:296)
> ==13113==    by 0x5188C9: KpiData::buildKpi(std::string&) (KpiData.C:384)
> ==13113==    by 0x50F0F3: KpiClientMgr::buildKpi(std::string&)
> (KpiClientMgr.C:731)
> ==13113==    by 0x50F1E3: KpiClientMgr::buildPayload(std::string&)
> (KpiClientMgr.C:695)
> ==13113==    by 0x51009A: KpiClientMgr::buildAndSendKpi()
> (KpiClientMgr.C:294)
> ==13113==    by 0x511287: KpiClientMgr::publishKpi() (KpiClientMgr.C:636)
> ==13113==    by 0x512962: KpiClientMgr::run() (KpiClientMgr.C:235)
> ==13113==    by 0x512D78: KpiClientMgrThreadCbk (KpiClientMgr.C:47)
> ==13113==    by 0x9A23DD4: start_thread (in /usr/lib64/libpthread-2.17.so)
> ==13113==    by 0xC199EAC: clone (in /usr/lib64/libc-2.17.so)
> ==13113==  *Address 0xe2ddfa8 is 8 bytes inside a block of size 112
> free'd*
> ==13113==    at 0x4C2B16D: operator delete(void*) (vg_replace_malloc.c:576)
> ==13113==    by 0x576B58: erase (map.h:1128)
> ==13113==    by 0x576B58: erase (map.h:1135)
> ==13113==    by 0x576B58: google::protobuf::Map<std::string,
> hi2iristats::common::Hi2IriStatsData_PerCFStats>::clear() (map.h:1138)
> ==13113==    by 0x589596:
> google::protobuf::internal::MapField<hi2iristats::common::Hi2IriStatsData_CfStatsEntry_DoNotUse,
> std::string, hi2iristats::common::Hi2IriStatsData_PerCFStats,
> (google::protobuf::internal::WireFormatLite::FieldType)9,
> (google::protobuf::internal::WireFormatLite::FieldType)11,
> 0>::SyncMapWithRepeatedFieldNoLock() const (map_field_inl.h:307)
> ==13113==    by 0x73FAE20:
> google::protobuf::internal::MapFieldBase::SyncMapWithRepeatedField() const
> (map_field.cc:116)
> ==13113==    by 0x544177: GetMap (map_field.h:250)
> ==13113==    by 0x544177: cf_stats (kpi_hi2_iridata.pb.h:1230)
> ==13113==    by 0x544177:
> hi2iristats::common::Hi2IriStatsData::InternalSerializeWithCachedSizesToArray(bool,
> unsigned char*) const (kpi_hi2_iridata.pb.cc:1963)
> ==13113==    by 0x73797A4:
> google::protobuf::MessageLite::AppendPartialToString(std::string*) const
> (message_lite.cc:296)
> ==13113==    by 0x5188C9: KpiData::buildKpi(std::string&) (KpiData.C:384)
> ==13113==    by 0x50F0F3: KpiClientMgr::buildKpi(std::string&)
> (KpiClientMgr.C:731)
> ==13113==    by 0x50F1E3: KpiClientMgr::buildPayload(std::string&)
> (KpiClientMgr.C:695)
> ==13113==    by 0x51009A: KpiClientMgr::buildAndSendKpi()
> (KpiClientMgr.C:294)
> ==13113==    by 0x511287: KpiClientMgr::publishKpi() (KpiClientMgr.C:636)
> ==13113==    by 0x512962: KpiClientMgr::run() (KpiClientMgr.C:235)
> ==13113==  *Block was alloc'd at*
> ==13113==    at 0x4C2A1E3: operator new(unsigned long)
> (vg_replace_malloc.c:334)
> ==13113==    by 0x589399: CreateValueTypeInternal (map.h:1175)
> ==13113==    by 0x589399: google::protobuf::Map<std::string,
> hi2iristats::common::Hi2IriStatsData_PerCFStats>::operator[](std::string
> const&) (map.h:1050)
> ==13113==    by 0x5895DA:
> google::protobuf::internal::MapField<hi2iristats::common::Hi2IriStatsData_CfStatsEntry_DoNotUse,
> std::string, hi2iristats::common::Hi2IriStatsData_PerCFStats,
> (google::protobuf::internal::WireFormatLite::FieldType)9,
> (google::protobuf::internal::WireFormatLite::FieldType)11,
> 0>::SyncMapWithRepeatedFieldNoLock() const (map_field_inl.h:315)
> ==13113==    by 0x73FAE20:
> google::protobuf::internal::MapFieldBase::SyncMapWithRepeatedField() const
> (map_field.cc:116)
> ==13113==    by 0x54410B: GetMap (map_field.h:250)
> ==13113==    by 0x54410B: cf_stats (kpi_hi2_iridata.pb.h:1230)
> ==13113==    by 0x54410B:
> hi2iristats::common::Hi2IriStatsData::InternalSerializeWithCachedSizesToArray(bool,
> unsigned char*) const (kpi_hi2_iridata.pb.cc:1923)
> ==13113==    by 0x73797A4:
> google::protobuf::MessageLite::AppendPartialToString(std::string*) const
> (message_lite.cc:296)
> ==13113==    by 0x5188C9: KpiData::buildKpi(std::string&) (KpiData.C:384)
> ==13113==    by 0x50F0F3: KpiClientMgr::buildKpi(std::string&)
> (KpiClientMgr.C:731)
> ==13113==    by 0x50F1E3: KpiClientMgr::buildPayload(std::string&)
> (KpiClientMgr.C:695)
> ==13113==    by 0x51009A: KpiClientMgr::buildAndSendKpi()
> (KpiClientMgr.C:294)
> ==13113==    by 0x511287: KpiClientMgr::publishKpi() (KpiClientMgr.C:636)
> ==13113==    by 0x512962: KpiClientMgr::run() (KpiClientMgr.C:235)
> *==13113==*
>
>
> Any help would be appreciated.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/protobuf.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/protobuf/4833e03a-3f85-4d41-ac61-2e4b3d0b3ac8%40googlegroups.com
> <https://groups.google.com/d/msgid/protobuf/4833e03a-3f85-4d41-ac61-2e4b3d0b3ac8%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/CADqAXr4f6wgCRidJLaV%3D-RfDGk-JTGkV3V_TNX%3DmhyafeSx8Cg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to