If coap_add_option2 fails, it has to return fail while sending data.
Otherwise, it causes a crash error when it tries to use a pdu wrong.
The below is the comment for coap_add_option2 on libcoap-4.1.1
/**
* Adds option of given type to pdu that is passed as first
* parameter. coap_add_option2() destroys the PDU's data, so
* coap_add_data() must be called after all options have been added.
* As coap_add_token2() destroys the options following the token,
* the token must be added before coap_add_option2() is called.
* This function returns the number of bytes written or @c 0 on error.
*/
size_t coap_add_option2(coap_pdu_t *pdu, unsigned short type, unsigned int len,
const unsigned char *data, coap_transport_t transport);
Change-Id: I405c77a63902d9c48b50cb9b94448a9f0e1990f0
Signed-off-by: Jaewook Jung <jw0213.jung@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/15053
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Dan Mihai <Daniel.Mihai@microsoft.com>
Reviewed-by: Phil Coval <philippe.coval@osg.samsung.com>
Reviewed-by: Hyuna Jo <hyuna0213.jo@samsung.com>
Reviewed-by: Ashok Babu Channa <ashok.channa@samsung.com>
COAP_OPTION_DATA(*(coap_option *) opt->data));
OIC_LOG_V(DEBUG, TAG, "[%d] pdu length", pdu->length);
- coap_add_option2(pdu, COAP_OPTION_KEY(*(coap_option *) opt->data),
- COAP_OPTION_LENGTH(*(coap_option *) opt->data),
- COAP_OPTION_DATA(*(coap_option *) opt->data), *transport);
+ if (0 == coap_add_option2(pdu, COAP_OPTION_KEY(*(coap_option *) opt->data),
+ COAP_OPTION_LENGTH(*(coap_option *) opt->data),
+ COAP_OPTION_DATA(*(coap_option *) opt->data), *transport))
+ {
+ OIC_LOG(ERROR, TAG, "coap_add_option2 has failed");
+ coap_delete_pdu(pdu);
+ return NULL;
+ }
}
}