X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=logging.c;h=563dcded510001f9bb223ccf7301648d02f8317a;hb=9f9d72ec58642e91b4f93ee4405a8086ee2fb2f0;hp=19eb2cb3992fd22c387e6b6cacfc727edfc6edd3;hpb=e1628105163135ca21abb6a841d109969d7979ec;p=PuTTY.git diff --git a/logging.c b/logging.c index 19eb2cb3..563dcded 100644 --- a/logging.c +++ b/logging.c @@ -446,6 +446,7 @@ static Filename *xlatlognam(Filename *src, char *hostname, int port, s = filename_to_str(src); while (*s) { + int sanitise = FALSE; /* Let (bufp, len) be the string to append. */ bufp = buf; /* don't usually override this */ if (*s == '&') { @@ -478,6 +479,12 @@ static Filename *xlatlognam(Filename *src, char *hostname, int port, if (c != '&') buf[size++] = c; } + /* Never allow path separators - or any other illegal + * filename character - to come out of any of these + * auto-format directives. E.g. 'hostname' can contain + * colons, if it's an IPv6 address, and colons aren't + * legal in filenames on Windows. */ + sanitise = TRUE; } else { buf[0] = *s++; size = 1; @@ -486,8 +493,12 @@ static Filename *xlatlognam(Filename *src, char *hostname, int port, bufsize = (buflen + size) * 5 / 4 + 512; buffer = sresize(buffer, bufsize, char); } - memcpy(buffer + buflen, bufp, size); - buflen += size; + while (size-- > 0) { + char c = *bufp++; + if (sanitise) + c = filename_char_sanitise(c); + buffer[buflen++] = c; + } } buffer[buflen] = '\0';