From ab063437ce4271d31c150a19390c6d6b18aedf04 Mon Sep 17 00:00:00 2001
From: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Date: Thu, 25 Jul 2019 23:39:04 +0200
Subject: Make sure symlink in fstree_mknode is always set when creating a
 symlink

Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
---
 lib/fstree/mknode.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

(limited to 'lib/fstree')

diff --git a/lib/fstree/mknode.c b/lib/fstree/mknode.c
index ea0d0aa..c6572fe 100644
--- a/lib/fstree/mknode.c
+++ b/lib/fstree/mknode.c
@@ -5,6 +5,7 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include <errno.h>
 
 tree_node_t *fstree_mknode(fstree_t *fs, tree_node_t *parent, const char *name,
 			   size_t name_len, const char *extra,
@@ -16,6 +17,10 @@ tree_node_t *fstree_mknode(fstree_t *fs, tree_node_t *parent, const char *name,
 
 	switch (sb->st_mode & S_IFMT) {
 	case S_IFLNK:
+		if (extra == NULL) {
+			errno = EINVAL;
+			return NULL;
+		}
 		size += strlen(extra) + 1;
 		break;
 	case S_IFDIR:
@@ -67,7 +72,8 @@ tree_node_t *fstree_mknode(fstree_t *fs, tree_node_t *parent, const char *name,
 	case S_IFLNK:
 		n->mode = S_IFLNK | 0777;
 		n->data.slink_target = (char *)n->payload;
-		strcpy(n->data.slink_target, extra);
+		if (extra != NULL)
+			strcpy(n->data.slink_target, extra);
 		break;
 	case S_IFBLK:
 	case S_IFCHR:
-- 
cgit v1.2.3