summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNei <ailin.nemui@gmail.com>2018-01-04 22:19:29 +0000
committerNei <ailin.nemui@gmail.com>2018-01-04 22:19:29 +0000
commit94f0cbe34a2089d00ba1bf61e9c2b28318f953b9 (patch)
tree58a98dc99c28618ada7b155922ecfa7446f4228c /src
parentcf70fcd4b9b035e600462e8e5fa895c82741e721 (diff)
parent2361d4b1e5d38701f35146219ceddd318ac4e645 (diff)
downloadirssi-94f0cbe34a2089d00ba1bf61e9c2b28318f953b9.zip
Merge branch 'fix-gl-19' into 'security'
rewrite completion code and check for direct match of separator See merge request irssi/irssi!27
Diffstat (limited to 'src')
-rw-r--r--src/fe-common/core/completion.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/fe-common/core/completion.c b/src/fe-common/core/completion.c
index e78fe7d5..fd452e5c 100644
--- a/src/fe-common/core/completion.c
+++ b/src/fe-common/core/completion.c
@@ -187,12 +187,18 @@ char *word_complete(WINDOW_REC *window, const char *line, int *pos, int erase, i
char *old;
old = linestart;
- linestart = *linestart == '\0' ?
- g_strdup(word) :
- g_strdup_printf("%s%c%s",
- /* do not accidentally duplicate the word separator */
- line == wordstart - 1 ? "" : linestart,
- old_wordstart[-1], word);
+ /* we want to move word into linestart */
+ if (*linestart == '\0') {
+ linestart = g_strdup(word);
+ } else {
+ GString *str = g_string_new(linestart);
+ if (old_wordstart[-1] != str->str[str->len - 1]) {
+ /* do not accidentally duplicate the word separator */
+ g_string_append_c(str, old_wordstart[-1]);
+ }
+ g_string_append(str, word);
+ linestart = g_string_free(str, FALSE);
+ }
g_free(old);
g_free(word);