diff --git a/sys/include/net/nanocoap.h b/sys/include/net/nanocoap.h index 9158f85578..b469f511bc 100644 --- a/sys/include/net/nanocoap.h +++ b/sys/include/net/nanocoap.h @@ -586,6 +586,7 @@ ssize_t coap_opt_get_next(const coap_pkt_t *pkt, coap_optpos_t *opt, * * @return length of option; 0 if the option exists but is empty * @return -ENOENT if option not found + * @return -EINVAL if option cannot be parsed */ ssize_t coap_opt_get_opaque(coap_pkt_t *pkt, unsigned opt_num, uint8_t **value); /**@}*/ diff --git a/sys/net/application_layer/nanocoap/nanocoap.c b/sys/net/application_layer/nanocoap/nanocoap.c index df0853c349..904888cf09 100644 --- a/sys/net/application_layer/nanocoap/nanocoap.c +++ b/sys/net/application_layer/nanocoap/nanocoap.c @@ -217,6 +217,10 @@ ssize_t coap_opt_get_opaque(coap_pkt_t *pkt, unsigned opt_num, uint8_t **value) int len; *value = _parse_option(pkt, start, &delta, &len); + if (!*value) { + return -EINVAL; + } + return len; }