Module Name:    src
Committed By:   manu
Date:           Mon Oct 11 01:52:05 UTC 2010

Modified Files:
        src/lib/libperfuse: ops.c

Log Message:
FUSE filesystems' readlink returns a resolved link with a NUL trailing
character, and PUFFS do not want it. This fixes this bug, that returned
stat the informations for x instead of reporting ENOENT:
mkdir x && ln x z && stat -x z/whatever/you/want


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 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.21 src/lib/libperfuse/ops.c:1.22
--- src/lib/libperfuse/ops.c:1.21	Mon Oct 11 01:08:26 2010
+++ src/lib/libperfuse/ops.c	Mon Oct 11 01:52:05 2010
@@ -1,4 +1,4 @@
-/*  $NetBSD: ops.c,v 1.21 2010/10/11 01:08:26 manu Exp $ */
+/*  $NetBSD: ops.c,v 1.22 2010/10/11 01:52:05 manu Exp $ */
 
 /*-
  *  Copyright (c) 2010 Emmanuel Dreyfus. All rights reserved.
@@ -2410,12 +2410,18 @@
 		goto out;
 
 	foh = GET_OUTHDR(ps, pm);
-	len = foh->len - sizeof(*foh) + 1;
+	len = foh->len - sizeof(*foh);
 	if (len > *linklen)
 		DERRX(EX_PROTOCOL, "path len = %zd too long", len);
+	if (len == 0)
+		DERRX(EX_PROTOCOL, "path len = %zd too short", len);
 		
-	*linklen = len;
-	(void)strlcpy(linkname, _GET_OUTPAYLOAD(ps, pm, char *), len);
+	/*
+	 * FUSE filesystems return a NUL terminated string, we 
+	 * do not want to trailing \0
+	 */
+	*linklen = len - 1;
+	(void)memcpy(linkname, _GET_OUTPAYLOAD(ps, pm, char *), len);
 out:
 	ps->ps_destroy_msg(pm);
 

Reply via email to