diff options
author | LemonBoy <thatlemon@gmail.com> | 2016-06-23 13:25:23 +0200 |
---|---|---|
committer | Ailin Nemui <ailin@z30a.localdomain> | 2017-01-02 17:50:14 +0100 |
commit | 5dcf291f2144564363f734dba15760d3a82b61c2 (patch) | |
tree | 05c0df68c8cea8474336a006d1db1aea978fe7f1 | |
parent | 5eaead761f1812fb9d4058b2bc38468521794693 (diff) | |
download | irssi-5dcf291f2144564363f734dba15760d3a82b61c2.zip |
Use the RAW flag when building the regexps.
Also, plugged a memory leak when retrieving the match position.
-rw-r--r-- | src/core/ignore.c | 2 | ||||
-rw-r--r-- | src/fe-common/core/hilight-text.c | 23 | ||||
-rw-r--r-- | src/fe-text/textbuffer.c | 4 |
3 files changed, 16 insertions, 13 deletions
diff --git a/src/core/ignore.c b/src/core/ignore.c index c91f6e4a..cfcbd792 100644 --- a/src/core/ignore.c +++ b/src/core/ignore.c @@ -328,7 +328,7 @@ static void ignore_init_rec(IGNORE_REC *rec) if (rec->regexp && rec->pattern != NULL) { GError *re_error; - rec->preg = g_regex_new(rec->pattern, G_REGEX_CASELESS, 0, &re_error); + rec->preg = g_regex_new(rec->pattern, G_REGEX_OPTIMIZE | G_REGEX_RAW | G_REGEX_CASELESS, 0, &re_error); if (rec->preg == NULL) { g_warning("Failed to compile regexp '%s': %s", rec->pattern, re_error->message); diff --git a/src/fe-common/core/hilight-text.c b/src/fe-common/core/hilight-text.c index e3dcc2d9..7a7f473c 100644 --- a/src/fe-common/core/hilight-text.c +++ b/src/fe-common/core/hilight-text.c @@ -121,7 +121,7 @@ static void hilight_init_rec(HILIGHT_REC *rec) if (rec->preg != NULL) g_regex_unref(rec->preg); - rec->preg = g_regex_new(rec->text, G_REGEX_CASELESS, 0, NULL); + rec->preg = g_regex_new(rec->text, G_REGEX_OPTIMIZE | G_REGEX_RAW | G_REGEX_CASELESS, 0, NULL); } void hilight_create(HILIGHT_REC *rec) @@ -188,22 +188,25 @@ static HILIGHT_REC *hilight_find(const char *text, char **channels) return NULL; } -static int hilight_match_text(HILIGHT_REC *rec, const char *text, +static gboolean hilight_match_text(HILIGHT_REC *rec, const char *text, int *match_beg, int *match_end) { - char *match; + gboolean ret = FALSE; if (rec->regexp) { - GMatchInfo *match; - if (rec->preg != NULL) { + GMatchInfo *match; + g_regex_match (rec->preg, text, 0, &match); - if (g_match_info_matches(match)) { - return g_match_info_fetch_pos(match, 0, match_beg, match_end); - } + if (g_match_info_matches(match)) + ret = g_match_info_fetch_pos(match, 0, match_beg, match_end); + + g_match_info_free(match); } } else { + char *match; + if (rec->case_sensitive) { match = rec->fullword ? strstr_full(text, rec->text) : @@ -218,11 +221,11 @@ static int hilight_match_text(HILIGHT_REC *rec, const char *text, *match_beg = (int) (match-text); *match_end = *match_beg + strlen(rec->text); } - return TRUE; + ret = TRUE; } } - return FALSE; + return ret; } #define hilight_match_level(rec, level) \ diff --git a/src/fe-text/textbuffer.c b/src/fe-text/textbuffer.c index f35848a2..979a6104 100644 --- a/src/fe-text/textbuffer.c +++ b/src/fe-text/textbuffer.c @@ -546,7 +546,7 @@ GList *textbuffer_find_text(TEXT_BUFFER_REC *buffer, LINE_REC *startline, preg = NULL; if (regexp) { - preg = g_regex_new(text, (case_sensitive ? 0 : G_REGEX_CASELESS), 0, NULL); + preg = g_regex_new(text, G_REGEX_RAW | (case_sensitive ? 0 : G_REGEX_CASELESS), 0, NULL); if (preg == NULL) return NULL; @@ -602,7 +602,7 @@ GList *textbuffer_find_text(TEXT_BUFFER_REC *buffer, LINE_REC *startline, } } - if (regexp) + if (preg != NULL) g_regex_unref(preg); g_string_free(str, TRUE); return matches; |