diff options
author | LemonBoy <thatlemon@gmail.com> | 2017-02-21 15:54:31 +0100 |
---|---|---|
committer | LemonBoy <thatlemon@gmail.com> | 2017-02-22 11:49:09 +0100 |
commit | 027acffb4208d7e6ba8e229cbf6c3dae6f5dabaf (patch) | |
tree | dbd545231f3d041717bf978ea54b5b48f9caebb8 /src/irc | |
parent | db85ab7c90f23e00cd444728f6a5b3d1f63254df (diff) | |
download | irssi-027acffb4208d7e6ba8e229cbf6c3dae6f5dabaf.zip |
Handle file names with quotes.
Let's repurpose escape_string and make it more flexible by letting us
choose the characters to escape.
Diffstat (limited to 'src/irc')
-rw-r--r-- | src/irc/dcc/dcc-autoget.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/irc/dcc/dcc-autoget.c b/src/irc/dcc/dcc-autoget.c index 995b3e04..21417211 100644 --- a/src/irc/dcc/dcc-autoget.c +++ b/src/irc/dcc/dcc-autoget.c @@ -23,6 +23,7 @@ #include "masks.h" #include "settings.h" #include "servers.h" +#include "misc.h" #include "dcc-get.h" @@ -30,7 +31,7 @@ static void sig_dcc_request(GET_DCC_REC *dcc, const char *nickaddr) { struct stat statbuf; const char *masks; - char *str, *file; + char *str, *file, *esc_arg; int max_size; if (!IS_DCC_GET(dcc)) return; @@ -68,11 +69,14 @@ static void sig_dcc_request(GET_DCC_REC *dcc, const char *nickaddr) /* ok. but do we want/need to resume? */ file = dcc_get_download_path(dcc->arg); + /* we have to escape the quotes as the whole file name gets quoted */ + esc_arg = escape_string(dcc->arg, "\""); str = g_strdup_printf(settings_get_bool("dcc_autoresume") && stat(file, &statbuf) == 0 ? "RESUME %s \"%s\"" : "GET %s \"%s\"", - dcc->nick, dcc->arg); + dcc->nick, esc_arg); signal_emit("command dcc", 2, str, dcc->server); + g_free(esc_arg); g_free(file); g_free(str); } |