-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3694-0004-Hex-patterns-handle-invalid-characters.patch
87 lines (78 loc) · 2.87 KB
/
3694-0004-Hex-patterns-handle-invalid-characters.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
From 0935dc82e9731b12e437ef2723bdca33a6146693 Mon Sep 17 00:00:00 2001
From: Mooffie <mooffie@gmail.com>
Date: Sun, 25 Sep 2016 18:30:45 +0300
Subject: [PATCH 4/8] Hex patterns: handle invalid characters.
---
lib/search/hex.c | 17 +++++++++++++----
tests/lib/search/hex_translate_to_regex.c | 6 ++++++
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/lib/search/hex.c b/lib/search/hex.c
index 524a322..9395543 100644
--- a/lib/search/hex.c
+++ b/lib/search/hex.c
@@ -42,7 +42,8 @@
typedef enum
{
MC_SEARCH_HEX_E_OK,
- MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE
+ MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE,
+ MC_SEARCH_HEX_E_INVALID_CHARACTER
} mc_search_hex_parse_error_t;
/*** file scope type declarations ****************************************************************/
@@ -76,7 +77,6 @@ mc_search__hex_translate_to_regex (const GString * astr, mc_search_hex_parse_err
*tmp_str2++ = ' ';
}
- g_strchug (tmp_str); /* trim leadind whitespaces */
tmp_str_len = strlen (tmp_str);
while (loop < tmp_str_len && error == MC_SEARCH_HEX_E_OK)
@@ -84,8 +84,14 @@ mc_search__hex_translate_to_regex (const GString * astr, mc_search_hex_parse_err
unsigned int val;
int ptr;
+ if (g_ascii_isspace (tmp_str[loop]))
+ {
+ /* Eat-up whitespace between tokens. */
+ while (g_ascii_isspace (tmp_str[loop]))
+ loop++;
+ }
/* cppcheck-suppress invalidscanf */
- if (sscanf (tmp_str + loop, "%x%n", &val, &ptr) == 1)
+ else if (sscanf (tmp_str + loop, "%x%n", &val, &ptr) == 1)
{
if (val > 255)
error = MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE;
@@ -112,7 +118,7 @@ mc_search__hex_translate_to_regex (const GString * astr, mc_search_hex_parse_err
loop += loop2;
}
else
- loop++;
+ error = MC_SEARCH_HEX_E_INVALID_CHARACTER;
}
g_free (tmp_str);
@@ -159,6 +165,9 @@ mc_search__cond_struct_new_init_hex (const char *charset, mc_search_t * lc_mc_se
_
("Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in hex)");
break;
+ case MC_SEARCH_HEX_E_INVALID_CHARACTER:
+ desc = _("Invalid character");
+ break;
default:
desc = "";
}
diff --git a/tests/lib/search/hex_translate_to_regex.c b/tests/lib/search/hex_translate_to_regex.c
index c72dff9..4b580ae 100644
--- a/tests/lib/search/hex_translate_to_regex.c
+++ b/tests/lib/search/hex_translate_to_regex.c
@@ -79,6 +79,12 @@ static const struct test_hex_translate_to_regex_ds
NULL,
MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE
},
+ {
+ /* Error: Invalid characters */
+ "1 z 2",
+ NULL,
+ MC_SEARCH_HEX_E_INVALID_CHARACTER
+ },
};
/* *INDENT-ON* */
--
2.9.3