diff mbox

[12/17] fedfsc: Fix memory leak in fedfs-lookup-junction

Message ID 20140511212945.13852.87260.stgit@seurat.1015granger.net
State Accepted
Headers show

Commit Message

Chuck Lever May 11, 2014, 9:29 p.m. UTC
Ensure "fsls" and "fsn" are freed before returning.

Fixes: 56048fc7270f82a0e9ecf5b4dcd2d31b47bcffab
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 src/fedfsc/fedfs-lookup-junction.c |   18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)
diff mbox

Patch

diff --git a/src/fedfsc/fedfs-lookup-junction.c b/src/fedfsc/fedfs-lookup-junction.c
index 188d588..b43a6ae 100644
--- a/src/fedfsc/fedfs-lookup-junction.c
+++ b/src/fedfsc/fedfs-lookup-junction.c
@@ -141,13 +141,13 @@  fedfs_lookup_junction_print_fsls(struct admin_fsl *fsl)
 static FedFsStatus
 fedfs_lookup_junction_try(admin_t host, char * const *path_array, int request)
 {
-	struct admin_fsl *fsls;
-	struct admin_fsn *fsn;
+	struct admin_fsl *fsls = NULL;
+	struct admin_fsn *fsn = NULL;
 	int status, err;
 
+	status = EXIT_FAILURE;
 	switch (request) {
 	case 0:
-		fsls = NULL;
 		err = admin_lookup_junction_none(host, path_array, &fsn);
 		break;
 	case 1:
@@ -158,9 +158,11 @@  fedfs_lookup_junction_try(admin_t host, char * const *path_array, int request)
 		err = admin_lookup_junction_nsdb(host, path_array,
 								&fsn, &fsls);
 		break;
+	default:
+		xlog(L_ERROR, "Unrecognized request");
+		goto out;
 	}
 
-	status = EXIT_FAILURE;
 	switch (err) {
 	case 0:
 		break;
@@ -184,23 +186,23 @@  fedfs_lookup_junction_try(admin_t host, char * const *path_array, int request)
 		printf("NSDB: %s:%u\n",
 			fsn->af_nsdb.an_hostname,
 			fsn->af_nsdb.an_port);
-		admin_free_fsn(fsn);
-		if (request > 0) {
+		if (request > 0)
 			fedfs_lookup_junction_print_fsls(fsls);
-			admin_free_fsls(fsls);
-		}
 		status = EXIT_SUCCESS;
 		break;
 	case FEDFS_ERR_NSDB_LDAP_VAL:
 		fprintf(stderr, "LDAP result code (%d): %s\n",
 			admin_ldaperr(host),
 			ldap_err2string(admin_ldaperr(host)));
+		break;
 	case FEDFS_ERR_NSDB_PARAMS:
 		printf("No connection parameters found\n");
 		break;
 	default:
 		nsdb_print_fedfsstatus(admin_status(host));
 	}
+	admin_free_fsls(fsls);
+	admin_free_fsn(fsn);
 
 out:
 	return status;