fix the bug for memory leak of handover message(enb/mme status trasfer) encoding/decoding

This commit is contained in:
Sukchan Lee 2017-09-15 10:40:25 +09:00
parent 0b6657f501
commit f783e2ffd0
4 changed files with 37 additions and 5 deletions

View File

@ -932,6 +932,7 @@ status_t s1ap_build_mme_status_transfer(pkbuf_t **s1apbuf,
enb_ue_t *enb_ue, S1ap_ENBStatusTransferIEs_t *enb_ies)
{
char buf[INET_ADDRSTRLEN];
int i;
int encoded;
s1ap_message_t message;
@ -944,9 +945,24 @@ status_t s1ap_build_mme_status_transfer(pkbuf_t **s1apbuf,
mme_ies->mme_ue_s1ap_id = enb_ue->mme_ue_s1ap_id;
mme_ies->eNB_UE_S1AP_ID = enb_ue->enb_ue_s1ap_id;
memcpy(&mme_ies->eNB_StatusTransfer_TransparentContainer,
&enb_ies->eNB_StatusTransfer_TransparentContainer,
sizeof(S1ap_ENB_StatusTransfer_TransparentContainer_t));
for (i = 0; i < enb_ies->eNB_StatusTransfer_TransparentContainer.
bearers_SubjectToStatusTransferList.list.count; i++)
{
S1ap_IE_t *enb_ie = NULL, *mme_ie = NULL;
enb_ie = (S1ap_IE_t *)enb_ies->
eNB_StatusTransfer_TransparentContainer.
bearers_SubjectToStatusTransferList.list.array[i];
d_assert(enb_ie, return CORE_ERROR, "Null param");
mme_ie = s1ap_copy_ie(enb_ie);
d_assert(mme_ie, return CORE_ERROR, "Null param");
ASN_SEQUENCE_ADD(&mme_ies->
eNB_StatusTransfer_TransparentContainer.
bearers_SubjectToStatusTransferList, mme_ie);
}
message.procedureCode = S1ap_ProcedureCode_id_MMEStatusTransfer;
message.direction = S1AP_PDU_PR_initiatingMessage;

View File

@ -108,3 +108,20 @@ void s1ap_ENB_ID_to_uint32(S1ap_ENB_ID_t *eNB_ID, c_uint32_t *uint32)
d_assert(0, return, "Invalid param");
}
}
S1ap_IE_t *s1ap_copy_ie(S1ap_IE_t *ie)
{
S1ap_IE_t *buff;
buff = core_malloc(sizeof (S1ap_IE_t));
d_assert(buff, return NULL,);
memset((void *)buff, 0, sizeof(S1ap_IE_t));
buff->id = ie->id;
buff->criticality = ie->criticality;
buff->value.size = ie->value.size;
buff->value.buf = core_calloc(1, buff->value.size);
memcpy(buff->value.buf, ie->value.buf, buff->value.size);
return buff;
}

View File

@ -22,6 +22,7 @@ CORE_DECLARE(void) s1ap_uint32_to_ENB_ID(
CORE_DECLARE(void) s1ap_ENB_ID_to_uint32(
S1ap_ENB_ID_t *eNB_ID, c_uint32_t *uint32);
CORE_DECLARE(S1ap_IE_t *) s1ap_copy_ie(S1ap_IE_t *ie);
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@ -614,7 +614,6 @@ static void handover_test2(abts_case *tc, void *data)
core_sleep(time_from_msec(300));
#if 0
/* Send Handover Required */
rv = tests1ap_build_handover_required(&sendbuf, 1);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
@ -670,7 +669,6 @@ static void handover_test2(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, CORE_OK, rv);
core_sleep(time_from_msec(300));
#endif
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8("001010123456815"));