diff options
| -rw-r--r-- | main.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -395,16 +395,22 @@ static bool path_isrel(const char *const path) { if (!strcmp(path, "..") || !strcmp(path, ".") - || !strcmp(path, "./") - || !strcmp(path, "../") + || !strncmp(path, "./", strlen("./")) + || !strncmp(path, "../", strlen("../")) + || strstr(path, "/./") || strstr(path, "/../")) return true; - static const char suffix[] = "/.."; - const size_t n = strlen(path), sn = strlen(suffix); + static const char *const suffixes[] = {"/.", "/.."}; - if (n >= sn && !strcmp(path + n - sn, suffix)) - return true; + for (size_t i = 0; i < sizeof suffixes / sizeof *suffixes; i++) + { + const char *const suffix = suffixes[i]; + const size_t n = strlen(path), sn = strlen(suffix); + + if (n >= sn && !strcmp(path + n - sn, suffix)) + return true; + } return false; } |
