summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/fstree/mknode.c8
1 files changed, 7 insertions, 1 deletions
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: