d1681e
From 2489f91d395740b42f21322744ab64427e94a683 Mon Sep 17 00:00:00 2001
d1681e
From: Jiffin Tony Thottan <jthottan@redhat.com>
d1681e
Date: Tue, 31 Jul 2018 14:52:51 +0530
d1681e
Subject: [PATCH 346/351] gfapi : Handle the path == "" glfs_resolve_at
d1681e
d1681e
Currently there is no check for path = "" in glfs_resolve_at.
d1681e
So if application sends an empty path, then the function resolves
d1681e
into the parent inode which is incorrect. Plus modified possible
d1681e
of "path" with "origpath" in the same function.
d1681e
d1681e
Upstream reference
d1681e
>Change-Id: Ie5ff9ce4b771607b7dbb3fe00704fe670421792a
d1681e
>fixes: bz#1610236
d1681e
>Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
d1681e
>link : https://review.gluster.org/#/c/glusterfs/+/20594/
d1681e
d1681e
Change-Id: Ie5ff9ce4b771607b7dbb3fe00704fe670421792a
d1681e
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
d1681e
Reviewed-on: https://code.engineering.redhat.com/gerrit/146938
d1681e
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
d1681e
---
d1681e
 api/src/glfs-resolve.c | 17 ++++++++++-------
d1681e
 1 file changed, 10 insertions(+), 7 deletions(-)
d1681e
d1681e
diff --git a/api/src/glfs-resolve.c b/api/src/glfs-resolve.c
d1681e
index 76835cb..95fe67a 100644
d1681e
--- a/api/src/glfs-resolve.c
d1681e
+++ b/api/src/glfs-resolve.c
d1681e
@@ -472,14 +472,13 @@ priv_glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at,
d1681e
 	DECLARE_OLD_THIS;
d1681e
 	__GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);
d1681e
 
d1681e
-	path = gf_strdup (origpath);
d1681e
-	if (!path) {
d1681e
-		errno = ENOMEM;
d1681e
-		return -1;
d1681e
-	}
d1681e
+        if (origpath[0] == '\0') {
d1681e
+                errno = EINVAL;
d1681e
+                goto invalid_fs;
d1681e
+        }
d1681e
 
d1681e
 	parent = NULL;
d1681e
-	if (at && path[0] != '/') {
d1681e
+	if (at && origpath[0] != '/') {
d1681e
 		/* A relative resolution of a path which starts with '/'
d1681e
 		   is equal to an absolute path resolution.
d1681e
 		*/
d1681e
@@ -487,10 +486,14 @@ priv_glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at,
d1681e
 	} else {
d1681e
 		inode = inode_ref (subvol->itable->root);
d1681e
 
d1681e
-		if (strcmp (path, "/") == 0)
d1681e
+		if (strcmp (origpath, "/") == 0)
d1681e
                         glfs_resolve_root (fs, subvol, inode, &ciatt);
d1681e
 	}
d1681e
 
d1681e
+        path = gf_strdup (origpath);
d1681e
+	if (!path)
d1681e
+		goto invalid_fs;
d1681e
+
d1681e
 	for (component = strtok_r (path, "/", &saveptr);
d1681e
 	     component; component = next_component) {
d1681e
 
d1681e
-- 
d1681e
1.8.3.1
d1681e