From 1aa1e2c8ccaae7848f64cd836e5d78f74fc814c2 Mon Sep 17 00:00:00 2001 From: Alexandre Abadie Date: Sun, 27 Oct 2019 11:20:41 +0100 Subject: [PATCH] sys/net/nanocoap: return ENOENT if parsing option failed This fixes a potential use of uninitialized len in subsequent function calls. This was reported by scan-build --- sys/include/net/nanocoap.h | 1 + sys/net/application_layer/nanocoap/nanocoap.c | 4 ++++ 2 files changed, 5 insertions(+) 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; }