diff options
author | David Barksdale <amatus.amongus@gmail.com> | 2015-08-17 02:55:38 +0000 |
---|---|---|
committer | David Barksdale <amatus.amongus@gmail.com> | 2015-08-17 02:55:38 +0000 |
commit | 01d39499bb3af0674917c7dabb3b202427273ba8 (patch) | |
tree | 50a401b537d52066dbf2252622b4092cfe036f39 /src/util/disk.c | |
parent | 40e5419b8db86bfb9a0bb5eba083e9a97e9dd9e9 (diff) | |
download | gnunet-01d39499bb3af0674917c7dabb3b202427273ba8.tar.gz gnunet-01d39499bb3af0674917c7dabb3b202427273ba8.zip |
The empty path is invalid
If GNUNET_DISK_directory_create_for_file() is called with a
path like "/foo" then we will pass the empty path to
GNUNET_DISK_directory_create() and access(). The latter will
always return ENOENT.
Diffstat (limited to 'src/util/disk.c')
-rw-r--r-- | src/util/disk.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/util/disk.c b/src/util/disk.c index 04bed6cc9..bd766a1b9 100644 --- a/src/util/disk.c +++ b/src/util/disk.c | |||
@@ -823,6 +823,11 @@ GNUNET_DISK_directory_create_for_file (const char *filename) | |||
823 | while ((len > 0) && (rdir[len] != DIR_SEPARATOR)) | 823 | while ((len > 0) && (rdir[len] != DIR_SEPARATOR)) |
824 | len--; | 824 | len--; |
825 | rdir[len] = '\0'; | 825 | rdir[len] = '\0'; |
826 | /* The empty path is invalid and in this case refers to / */ | ||
827 | if (0 == len) { | ||
828 | GNUNET_free (rdir); | ||
829 | rdir = GNUNET_strdup ("/"); | ||
830 | } | ||
826 | ret = GNUNET_DISK_directory_create (rdir); | 831 | ret = GNUNET_DISK_directory_create (rdir); |
827 | if ((ret == GNUNET_OK) && (0 != ACCESS (rdir, W_OK))) | 832 | if ((ret == GNUNET_OK) && (0 != ACCESS (rdir, W_OK))) |
828 | ret = GNUNET_NO; | 833 | ret = GNUNET_NO; |