diff options
author | Jiffin Tony Thottan <jthottan@redhat.com> | 2018-07-31 14:52:51 +0530 |
---|---|---|
committer | Shyamsundar Ranganathan <srangana@redhat.com> | 2018-08-22 01:05:53 +0000 |
commit | 95608a9d454fbc83f92aedac400b9580b95dbecc (patch) | |
tree | 5a8c9603c0b4765a065eebd1567b205eb3ac9e46 | |
parent | 9de3ccb5ffbc531a4d8ce708a733a861d3dcd3eb (diff) |
gfapi : Handle the path == "" glfs_resolve_at
Currently there is no check for path = "" in glfs_resolve_at.
So if application sends an empty path, then the function resolves
into the parent inode which is incorrect. Plus modified possible
of "path" with "origpath" in the same function.
Change-Id: Ie5ff9ce4b771607b7dbb3fe00704fe670421792a
fixes: bz#1618347
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
(cherry picked from commit febee007bb1a99d65300630c2a98cbb642b1c8dc)
-rw-r--r-- | api/src/glfs-resolve.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/api/src/glfs-resolve.c b/api/src/glfs-resolve.c index 51b31d2ae61..9a2b4aa7f27 100644 --- a/api/src/glfs-resolve.c +++ b/api/src/glfs-resolve.c @@ -472,14 +472,13 @@ priv_glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at, DECLARE_OLD_THIS; __GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs); - path = gf_strdup (origpath); - if (!path) { - errno = ENOMEM; - return -1; - } + if (origpath[0] == '\0') { + errno = EINVAL; + goto invalid_fs; + } parent = NULL; - if (at && path[0] != '/') { + if (at && origpath[0] != '/') { /* A relative resolution of a path which starts with '/' is equal to an absolute path resolution. */ @@ -487,10 +486,14 @@ priv_glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at, } else { inode = inode_ref (subvol->itable->root); - if (strcmp (path, "/") == 0) + if (strcmp (origpath, "/") == 0) glfs_resolve_root (fs, subvol, inode, &ciatt); } + path = gf_strdup (origpath); + if (!path) + goto invalid_fs; + for (component = strtok_r (path, "/", &saveptr); component; component = next_component) { |