Merge pull request #76 from simonduq/pr/coap-boundary-checks

Added boundary checks when parsing CoAP packets.
This commit is contained in:
Simon Duquennoy 2017-09-29 14:09:57 +02:00 committed by GitHub
commit 077a5426fe
1 changed files with 15 additions and 0 deletions

View File

@ -529,6 +529,21 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len)
++current_option;
}
if(current_option + option_length > data + data_len) {
/* Malformed CoAP - out of bounds */
PRINTF("BAD REQUEST: options outside data packet: %u > %u\n",
(unsigned)(current_option + option_length - data), data_len);
return BAD_REQUEST_4_00;
}
option_number += option_delta;
if(option_number > COAP_OPTION_SIZE1) {
/* Malformed CoAP - out of bounds */
PRINTF("BAD REQUEST: option number too large: %u\n", option_number);
return BAD_REQUEST_4_00;
}
option_number += option_delta;
PRINTF("OPTION %u (delta %u, len %zu): ", option_number, option_delta,