diff --git a/sys/net/application_layer/gcoap/gcoap.c b/sys/net/application_layer/gcoap/gcoap.c index e6fc5d91ff..6d016f6519 100644 --- a/sys/net/application_layer/gcoap/gcoap.c +++ b/sys/net/application_layer/gcoap/gcoap.c @@ -1664,13 +1664,19 @@ ssize_t gcoap_req_send(const uint8_t *buf, size_t len, switch (msg_type) { case COAP_TYPE_CON: + /* Can't store it for retransmission, even though sending it from + * the provided buffer once is possible */ + if (len > CONFIG_GCOAP_PDU_BUF_SIZE) { + return -EINVAL; + } + /* copy buf to resend_bufs record */ memo->msg.data.pdu_buf = NULL; for (int i = 0; i < CONFIG_GCOAP_RESEND_BUFS_MAX; i++) { if (!_coap_state.resend_bufs[i][0]) { memo->msg.data.pdu_buf = &_coap_state.resend_bufs[i][0]; memcpy(memo->msg.data.pdu_buf, buf, - CONFIG_GCOAP_PDU_BUF_SIZE); + len); memo->msg.data.pdu_len = len; break; }