Module Name: src Committed By: msaitoh Date: Sun Nov 9 06:16:50 UTC 2014
Modified Files: src/lib/libperfuse [netbsd-6]: ops.c Log Message: Pull up following revision(s) (requested by manu in ticket #1165): lib/libperfuse/ops.c: revision 1.75 Do not trust the filesystem's readdir to give us nul-terminated file names To generate a diff of this commit: cvs rdiff -u -r1.50.2.13 -r1.50.2.14 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.13 src/lib/libperfuse/ops.c:1.50.2.14 --- src/lib/libperfuse/ops.c:1.50.2.13 Tue Nov 4 01:52:53 2014 +++ src/lib/libperfuse/ops.c Sun Nov 9 06:16:50 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ops.c,v 1.50.2.13 2014/11/04 01:52:53 msaitoh Exp $ */ +/* $NetBSD: ops.c,v 1.50.2.14 2014/11/09 06:16:50 msaitoh Exp $ */ /*- * Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved. @@ -597,6 +597,7 @@ fuse_to_dirent(struct puffs_usermount *p do { char *ndp; size_t reclen; + char name[MAXPATHLEN]; reclen = _DIRENT_RECLEN(dents, fd->namelen); @@ -629,6 +630,9 @@ fuse_to_dirent(struct puffs_usermount *p dents = (struct dirent *)(void *)ndp; } + strncpy(name, fd->name, fd->namelen); + name[fd->namelen] = '\0'; + /* * Filesystem was mounted without -o use_ino * Perform a lookup to find it. @@ -641,13 +645,17 @@ fuse_to_dirent(struct puffs_usermount *p * Avoid breaking out of fs * by lookup to .. on root */ - if ((strcmp(fd->name, "..") == 0) && + if ((strcmp(name, "..") == 0) && (pnd->pnd_nodeid == FUSE_ROOT_ID)) { fd->ino = FUSE_ROOT_ID; } else { - if (node_lookup_common(pu, opc, NULL, fd->name, - NULL, &pn) != 0) { - DWARNX("node_lookup_common failed"); + int error; + + error = node_lookup_common(pu, opc, NULL, + name, NULL, &pn); + if (error != 0) { + DWARNX("node_lookup_common %s " + "failed: %d", name, error); } else { fd->ino = pn->pn_va.va_fileid; (void)perfuse_node_reclaim(pu, pn); @@ -659,7 +667,7 @@ fuse_to_dirent(struct puffs_usermount *p dents->d_reclen = (unsigned short)reclen; dents->d_namlen = fd->namelen; dents->d_type = fd->type; - strlcpy(dents->d_name, fd->name, fd->namelen + 1); + strlcpy(dents->d_name, name, fd->namelen + 1); #ifdef PERFUSE_DEBUG if (perfuse_diagflags & PDF_READDIR) @@ -710,7 +718,7 @@ fuse_to_dirent(struct puffs_usermount *p */ if (written != -1) PERFUSE_NODE_DATA(opc)->pnd_dirent_len = written; - + return written; }