Support server paths in various path functions

This commit is contained in:
Sebastian Kylander 2018-07-17 23:41:14 +02:00
parent bfcf22b1e1
commit 7089044a4c
3 changed files with 13 additions and 2 deletions

View File

@ -34,6 +34,9 @@ void do_getabsolute(char* result, const char* value, const char* relative_to)
result[0] = '\0';
if (buffer[0] == '/') {
strcat(result, "/");
if (buffer[1] == '/') {
strcat(result, "/");
}
}
prev = NULL;

View File

@ -67,6 +67,14 @@ int path_getrelative(lua_State* L)
return 1;
}
/* Relative paths within a server can't climb outside the server root.
* If the paths don't share server name, return the absolute path. */
if (src[0] == '/' && src[1] == '/' && last == 1) {
dst[strlen(dst) - 1] = '\0';
lua_pushstring(L, dst);
return 1;
}
/* count remaining levels in src */
count = 0;
for (i = last + 1; src[i] != '\0'; ++i) {

View File

@ -70,8 +70,8 @@ static void* normalize_substring(const char* str, const char* endPtr, char* writ
}
}
/* add to the result, filtering out duplicate slashes */
if (ch != '/' || last != '/') {
/* add to the result, filtering out duplicate slashes, except when they are leading slashes */
if (str == &source[1] || (ch != '/' || last != '/')) {
*(writePtr++) = ch;
}