From 6b81e7065665910bb6758e30efcd481c8dd69b5c Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Sun, 26 Dec 2010 23:07:18 +0000 Subject: [PATCH] * CID 2195: sizeof() was used on the buffer pointer instead of the type. * Use strlcpy() instead of memcpy() to ensure that the dirent is properly terminated. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39954 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/ntfs/ntfsdir.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/add-ons/kernel/file_systems/ntfs/ntfsdir.c b/src/add-ons/kernel/file_systems/ntfs/ntfsdir.c index fd4fd1ae8f..0207161dea 100644 --- a/src/add-ons/kernel/file_systems/ntfs/ntfsdir.c +++ b/src/add-ons/kernel/file_systems/ntfs/ntfsdir.c @@ -164,12 +164,13 @@ exit: } status_t -fs_readdir( fs_volume *_vol, fs_vnode *_node, void *_cookie, struct dirent *buf, size_t bufsize, uint32 *num ) +fs_readdir(fs_volume *_vol, fs_vnode *_node, void *_cookie, struct dirent *buf, + size_t bufsize, uint32 *num) { nspace *ns = (nspace*)_vol->private_volume; vnode *node = (vnode*)_node->private_node; dircookie *cookie = (dircookie*)_cookie; - uint32 nameLength = bufsize - sizeof(buf) + 1, realLen; + uint32 nameLength = bufsize - sizeof(struct dirent), realLen; int result = B_NO_ERROR; ntfs_inode *ni=NULL; @@ -196,11 +197,11 @@ fs_readdir( fs_volume *_vol, fs_vnode *_node, void *_cookie, struct dirent *buf, result = ntfs_readdir(ni, &cookie->pos, cookie, (ntfs_filldir_t)_ntfs_dirent_filler); - realLen = nameLength>255?255:nameLength; + realLen = nameLength > 255 ? 255 : nameLength; buf->d_dev = ns->id; buf->d_ino = cookie->ino; - memcpy(buf->d_name,cookie->name, realLen+1); - buf->d_reclen = sizeof(buf) + realLen - 1; + strlcpy(buf->d_name, cookie->name, realLen + 1); + buf->d_reclen = sizeof(struct dirent) + realLen; if(result==0) cookie->last = 1;