Path validation improvments. Now works with VC7 too.

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2175 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2003-02-18 19:58:16 +00:00
parent 7c3e42fa49
commit 3513e46793

View file

@ -518,21 +518,27 @@ char * NSISCALL process_string(const char *in)
char * NSISCALL validate_filename(char *in) { char * NSISCALL validate_filename(char *in) {
char *nono = "*?|<>/\":"; char *nono = "*?|<>/\":";
char *cur_char = " "; short cur_char = 0;
char *out = in; char *out;
char *out_save = out; char *out_save;
int i = 0; if (in[0] && in[1] && in[2]) {
while (*cur_char = *in++) { // at least four bytes
if (!mystrstr(nono, cur_char) || if (*(DWORD*)in == CHAR4_TO_DWORD('\\', '\\', '?', '\\')) in += 4;
(i == 1 && *(WORD*)out == CHAR2_TO_WORD(':','\\')) || }
(i == 2 && *cur_char == '?' && *(DWORD*)in == CHAR4_TO_DWORD('\\','\\','?','\\')) if (*in) {
) // at least two bytes
*out++ = *cur_char; if (in[0] && validpathspec(in)) in += 2;
i++; }
out = in;
out_save = out;
while (*(char*)&cur_char = *in++) {
if (!mystrstr(nono, (char*)&cur_char))
*out++ = *(char*)&cur_char;
} }
do { do {
*out = 0; *out = 0;
} while (i && (*(--out) == ' ' || *out == '\\')); --out;
} while (out_save <= out && (*out == ' ' || *out == '\\'));
return out_save; return out_save;
} }