From 2a5a5b4753722b0d58e6346c39bcaa5c90d885fa Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Sun, 29 Apr 2012 16:01:55 +0400 Subject: [PATCH] Ticket #2795: hex search: can't find 00 (zeroes) in patterns. Don't interpret the '0' character as end of search pattern. Use pattern length for that. Signed-off-by: Andrew Borodin --- lib/filehighlight/ini-file-read.c | 2 +- lib/search/regex.c | 14 ++++---------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/lib/filehighlight/ini-file-read.c b/lib/filehighlight/ini-file-read.c index 4774a03f6..bb7687d99 100644 --- a/lib/filehighlight/ini-file-read.c +++ b/lib/filehighlight/ini-file-read.c @@ -162,7 +162,7 @@ mc_fhl_parse_get_extensions (mc_fhl_t * fhl, const gchar * group_name) mc_filter = g_new0 (mc_fhl_filter_t, 1); mc_filter->type = MC_FLHGH_T_FREGEXP; - mc_filter->search_condition = mc_search_new (buf->str, -1); + mc_filter->search_condition = mc_search_new (buf->str, buf->len); mc_filter->search_condition->is_case_sensitive = mc_config_get_bool (fhl->config, group_name, "extensions_case", TRUE); mc_filter->search_condition->search_type = MC_SEARCH_T_REGEX; diff --git a/lib/search/regex.c b/lib/search/regex.c index 482e4583c..0c3d6d8aa 100644 --- a/lib/search/regex.c +++ b/lib/search/regex.c @@ -259,9 +259,8 @@ mc_search__regex_found_cond_one (mc_search_t * lc_mc_search, mc_search_regex_t * #ifdef SEARCH_TYPE_GLIB GError *error = NULL; - if (!g_regex_match_full - (regex, search_str->str, -1, 0, G_REGEX_MATCH_NEWLINE_ANY, &lc_mc_search->regex_match_info, - &error)) + if (!g_regex_match_full (regex, search_str->str, search_str->len, 0, G_REGEX_MATCH_NEWLINE_ANY, + &lc_mc_search->regex_match_info, &error)) { g_match_info_free (lc_mc_search->regex_match_info); lc_mc_search->regex_match_info = NULL; @@ -278,7 +277,7 @@ mc_search__regex_found_cond_one (mc_search_t * lc_mc_search, mc_search_regex_t * lc_mc_search->num_results = g_match_info_get_match_count (lc_mc_search->regex_match_info); #else /* SEARCH_TYPE_GLIB */ lc_mc_search->num_results = pcre_exec (regex, lc_mc_search->regex_match_info, - search_str->str, search_str->len - 1, 0, 0, + search_str->str, search_str->len, 0, 0, lc_mc_search->iovector, MC_SEARCH__NUM_REPLACE_ARGS); if (lc_mc_search->num_results < 0) { @@ -827,13 +826,8 @@ mc_search__run_regex (mc_search_t * lc_mc_search, const void *user_data, g_string_append_c (lc_mc_search->regex_buffer, (char) current_chr); - - if (current_chr == 0 || (char) current_chr == '\n') - break; - - if (virtual_pos > end_search) + if ((char) current_chr == '\n' || virtual_pos > end_search) break; - } switch (mc_search__regex_found_cond (lc_mc_search, lc_mc_search->regex_buffer)) { -- 2.11.4.GIT