diff --git a/src/coap_asn1.c b/src/coap_asn1.c index a0fa94c0..8ef55912 100644 --- a/src/coap_asn1.c +++ b/src/coap_asn1.c @@ -72,7 +72,7 @@ asn1_tag_c(const uint8_t **ptr, size_t *plen, int *constructed, int *cls) { tag = (tag << 7) + (byte & 0x7F); (*plen)--; (*ptr)++; - if (*plen == 0) + if (*plen == 0 || (uint32_t)tag > (INT_MAX >> 7)) return COAP_ASN1_FAIL; byte = (**ptr); } diff --git a/src/coap_subscribe.c b/src/coap_subscribe.c index 27f4ef5a..6740dda8 100644 --- a/src/coap_subscribe.c +++ b/src/coap_subscribe.c @@ -477,11 +477,11 @@ coap_op_observe_load_disk(coap_context_t *ctx) { if (!coap_op_observe_write(fp_new, observe_key, e_proto, e_listen_addr, s_addr_info, raw_packet, oscore_info)) goto fail; - coap_delete_bin_const(raw_packet); - raw_packet = NULL; - coap_delete_bin_const(oscore_info); - oscore_info = NULL; } + coap_delete_bin_const(raw_packet); + raw_packet = NULL; + coap_delete_bin_const(oscore_info); + oscore_info = NULL; } coap_delete_bin_const(raw_packet); raw_packet = NULL;