Module Name: src Committed By: manu Date: Wed Nov 12 05:08:44 UTC 2014
Modified Files: src/lib/libperfuse: ops.c Log Message: Allow setxattr to be called with a NULL value, instead of crashing. To generate a diff of this commit: cvs rdiff -u -r1.80 -r1.81 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.80 src/lib/libperfuse/ops.c:1.81 --- src/lib/libperfuse/ops.c:1.80 Tue Nov 4 09:17:31 2014 +++ src/lib/libperfuse/ops.c Wed Nov 12 05:08:43 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ops.c,v 1.80 2014/11/04 09:17:31 manu Exp $ */ +/* $NetBSD: ops.c,v 1.81 2014/11/12 05:08:43 manu Exp $ */ /*- * Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved. @@ -3460,6 +3460,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; @@ -3472,23 +3473,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: