Module Name:    src
Committed By:   snj
Date:           Tue Dec  2 22:01:37 UTC 2014

Modified Files:
        src/lib/libperfuse [netbsd-6]: ops.c

Log Message:
Pull up following revision(s) (requested by manu in ticket #1193):
        lib/libperfuse/ops.c: revision 1.81
Allow setxattr to be called with a NULL value, instead of crashing.


To generate a diff of this commit:
cvs rdiff -u -r1.50.2.18 -r1.50.2.19 src/lib/libperfuse/ops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libperfuse/ops.c
diff -u src/lib/libperfuse/ops.c:1.50.2.18 src/lib/libperfuse/ops.c:1.50.2.19
--- src/lib/libperfuse/ops.c:1.50.2.18	Sun Nov  9 11:03:41 2014
+++ src/lib/libperfuse/ops.c	Tue Dec  2 22:01:37 2014
@@ -1,4 +1,4 @@
-/*  $NetBSD: ops.c,v 1.50.2.18 2014/11/09 11:03:41 msaitoh Exp $ */
+/*  $NetBSD: ops.c,v 1.50.2.19 2014/12/02 22:01:37 snj Exp $ */
 
 /*-
  *  Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved.
@@ -3450,6 +3450,7 @@ perfuse_node_setextattr(struct puffs_use
 	perfuse_msg_t *pm;
 	struct fuse_setxattr_in *fsi;
 	size_t attrnamelen;
+	size_t datalen;
 	size_t len;
 	char *np;
 	int error;
@@ -3462,23 +3463,27 @@ perfuse_node_setextattr(struct puffs_use
 	ps = puffs_getspecific(pu);
 	attrname = perfuse_native_ns(attrns, attrname, fuse_attrname);
 	attrnamelen = strlen(attrname) + 1;
-	len = sizeof(*fsi) + attrnamelen + *resid;
+
+	datalen = (resid != NULL) ? *resid : 0;
+	len = sizeof(*fsi) + attrnamelen + datalen;
 
 	pm = ps->ps_new_msg(pu, opc, FUSE_SETXATTR, len, pcr);
 	fsi = GET_INPAYLOAD(ps, pm, fuse_setxattr_in);
-	fsi->size = (unsigned int)*resid;
+	fsi->size = (unsigned int)datalen;
 	fsi->flags = 0;
 	np = (char *)(void *)(fsi + 1);
 	(void)strlcpy(np, attrname, attrnamelen);
 	np += attrnamelen;
-	(void)memcpy(np, (char *)attr, *resid);
+	if (datalen)
+		(void)memcpy(np, (char *)attr, datalen);
 
 	if ((error = xchg_msg(pu, opc, pm, 
 			      NO_PAYLOAD_REPLY_LEN, wait_reply)) != 0)
 		goto out;
 
 	ps->ps_destroy_msg(pm);
-	*resid = 0;
+	if (resid)
+		*resid = 0;
 	error = 0;
 
 out:

Reply via email to