summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/common/rbpaths.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/firmware/common/rbpaths.c b/firmware/common/rbpaths.c
index 7632b70..8cf92fa 100644
--- a/firmware/common/rbpaths.c
+++ b/firmware/common/rbpaths.c
@@ -341,10 +341,14 @@ DIR* app_opendir(const char *_name)
return NULL;
struct __dir *this = (struct __dir*)buf;
- /* definitely fits due to strlen() */
- strcpy(this->path, name);
-
- this->dir = opendir(name);
+ /* carefully remove any trailing slash from the input, so that
+ * hash/path matching in readdir() works properly */
+ while (name[name_len-1] == '/')
+ name_len -= 1;
+ /* strcpy cannot be used because of trailing slashes */
+ memcpy(this->path, name, name_len);
+ this->path[name_len] = 0;
+ this->dir = opendir(this->path);
if (!this->dir)
{