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
|
b
|
|
42 | 42 | typedef enum |
43 | 43 | { |
44 | 44 | MC_SEARCH_HEX_E_OK, |
45 | | MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE |
| 45 | MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE, |
| 46 | MC_SEARCH_HEX_E_INVALID_CHARACTER |
46 | 47 | } mc_search_hex_parse_error_t; |
47 | 48 | |
48 | 49 | /*** file scope type declarations ****************************************************************/ |
… |
… |
mc_search__hex_translate_to_regex (const GString * astr, mc_search_hex_parse_err |
76 | 77 | *tmp_str2++ = ' '; |
77 | 78 | } |
78 | 79 | |
79 | | g_strchug (tmp_str); /* trim leadind whitespaces */ |
80 | 80 | tmp_str_len = strlen (tmp_str); |
81 | 81 | |
82 | 82 | while (loop < tmp_str_len && error == MC_SEARCH_HEX_E_OK) |
… |
… |
mc_search__hex_translate_to_regex (const GString * astr, mc_search_hex_parse_err |
84 | 84 | unsigned int val; |
85 | 85 | int ptr; |
86 | 86 | |
| 87 | if (g_ascii_isspace (tmp_str[loop])) |
| 88 | { |
| 89 | /* Eat-up whitespace between tokens. */ |
| 90 | while (g_ascii_isspace (tmp_str[loop])) |
| 91 | loop++; |
| 92 | } |
87 | 93 | /* cppcheck-suppress invalidscanf */ |
88 | | if (sscanf (tmp_str + loop, "%x%n", &val, &ptr) == 1) |
| 94 | else if (sscanf (tmp_str + loop, "%x%n", &val, &ptr) == 1) |
89 | 95 | { |
90 | 96 | if (val > 255) |
91 | 97 | error = MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE; |
… |
… |
mc_search__hex_translate_to_regex (const GString * astr, mc_search_hex_parse_err |
112 | 118 | loop += loop2; |
113 | 119 | } |
114 | 120 | else |
115 | | loop++; |
| 121 | error = MC_SEARCH_HEX_E_INVALID_CHARACTER; |
116 | 122 | } |
117 | 123 | |
118 | 124 | g_free (tmp_str); |
… |
… |
mc_search__cond_struct_new_init_hex (const char *charset, mc_search_t * lc_mc_se |
159 | 165 | _ |
160 | 166 | ("Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in hex)"); |
161 | 167 | break; |
| 168 | case MC_SEARCH_HEX_E_INVALID_CHARACTER: |
| 169 | desc = _("Invalid character"); |
| 170 | break; |
162 | 171 | default: |
163 | 172 | desc = ""; |
164 | 173 | } |
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
|
b
|
static const struct test_hex_translate_to_regex_ds |
79 | 79 | NULL, |
80 | 80 | MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE |
81 | 81 | }, |
| 82 | { |
| 83 | /* Error: Invalid characters */ |
| 84 | "1 z 2", |
| 85 | NULL, |
| 86 | MC_SEARCH_HEX_E_INVALID_CHARACTER |
| 87 | }, |
82 | 88 | }; |
83 | 89 | /* *INDENT-ON* */ |
84 | 90 | |