Skip to content

Commit 9b25103

Browse files
authored
Merge pull request #2517 from setoh2000/master
parser: Fix error handling for HEX_STR parsing in UDP_CHECK
2 parents 91baa39 + e7bf4d1 commit 9b25103

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

lib/parser.c

+8-3
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,7 @@ read_hex_str(const char *str, uint8_t **data, uint8_t **data_mask)
729729
uint8_t mask_val;
730730
bool using_mask = false;
731731
uint16_t len;
732+
bool has_error = false;
732733

733734
/* The output octet string cannot be longer than (strlen(str) + 1)/2 */
734735
str_len = (strlen(str) + 1) / 2;
@@ -745,8 +746,10 @@ read_hex_str(const char *str, uint8_t **data, uint8_t **data_mask)
745746
break;
746747

747748
val = hex_val(*p++, !!data_mask);
748-
if (val == 0xff)
749+
if (val == 0xff) {
750+
has_error = true;
749751
break;
752+
}
750753
if (val == 0xfe) {
751754
mask_val = 0x0f;
752755
val = 0;
@@ -758,8 +761,10 @@ read_hex_str(const char *str, uint8_t **data, uint8_t **data_mask)
758761
val1 = val << 4;
759762
mask_val <<= 4;
760763
val = hex_val(*p++, !!data_mask);
761-
if (val == 0xff)
764+
if (val == 0xff) {
765+
has_error = true;
762766
break;
767+
}
763768
if (val == 0xfe) {
764769
mask_val |= 0x0f;
765770
val = 0;
@@ -773,7 +778,7 @@ read_hex_str(const char *str, uint8_t **data, uint8_t **data_mask)
773778
len++;
774779
}
775780

776-
if (val == 0xff || !len) {
781+
if (has_error || !len) {
777782
FREE_ONLY(buf);
778783
FREE_ONLY(mask);
779784
return 0;

0 commit comments

Comments
 (0)