diff --git a/src/oscompat.h b/src/oscompat.h index 0b0c8b9..0e7a8db 100644 --- a/src/oscompat.h +++ b/src/oscompat.h @@ -44,7 +44,9 @@ static inline bool path_is_absolute(const char *path) #ifndef _WIN32 return path[0] == '/'; #else - return (isalpha(path[0]) && path[1] == ':') || + if (path[0] == '\0') + return false; + return (isalpha((unsigned char)path[0]) && path[1] == ':') || (path[0] == '\\' && path[1] == '\\'); #endif } diff --git a/tests/test_oscompat.c b/tests/test_oscompat.c index 9ee5bb2..189adbf 100644 --- a/tests/test_oscompat.c +++ b/tests/test_oscompat.c @@ -39,7 +39,13 @@ static void rmtree(const char *path) if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) continue; - snprintf(child, sizeof(child), "%s/%s", path, ent->d_name); + if (snprintf(child, sizeof(child), "%s/%s", path, + ent->d_name) >= (int)sizeof(child)) { + fprintf(stderr, + "skipping overly-long path %s/%s\n", + path, ent->d_name); + continue; + } if (stat(child, &st) == 0 && S_ISDIR(st.st_mode)) rmtree(child); else