Hi Yang, > --- > src/stkutil.c | 35 +++++++++++++++++++++++++++++++++++ > 1 files changed, 35 insertions(+), 0 deletions(-) > > diff --git a/src/stkutil.c b/src/stkutil.c > index ecd5639..8f4ff39 100644 > --- a/src/stkutil.c > +++ b/src/stkutil.c > @@ -687,6 +687,39 @@ static gboolean parse_dataobj_event_list( > STK_DATA_OBJECT_TYPE_EVENT_LIST); > } > > +/* Defined in TS 102.223 Section 8.26 */ > +static gboolean parse_dataobj_cause( > + struct comprehension_tlv_iter *iter, void *user) > +{ > + struct stk_common_byte_array *array = user; > + const unsigned char *data; > + unsigned int len; > + > + if (comprehension_tlv_iter_get_tag(iter) != STK_DATA_OBJECT_TYPE_CAUSE) > + return FALSE; > + > + len = comprehension_tlv_iter_get_length(iter); > + if ((len == 1) || (len > 30)) > + return FALSE; So if we know the max length is 30 why do we bother g_mallocing here? > + > + if (len == 0) { > + array->len = 0; > + array->array = NULL; > + return TRUE; > + } This won't work unfortunately. Cause is an optional element and cause with length 0 has special meaning. We will have to include a boolean variable for presence information somehow. Regards, -Denis