summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/imfs/imfs_dir_default.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-03-16 20:28:20 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-03-17 16:18:03 +0100
commite6f4a612d85cab1ac19cd04925eb96c157d75424 (patch)
tree19dfbdf6df182cc1394cf4463c9b39b32262a997 /cpukit/libfs/src/imfs/imfs_dir_default.c
parentspcbssched03/tasks_periodic.c: Fixed now used before set warning (diff)
downloadrtems-e6f4a612d85cab1ac19cd04925eb96c157d75424.tar.bz2
IMFS: NUL-terminate name returned by readdir()
Diffstat (limited to '')
-rw-r--r--cpukit/libfs/src/imfs/imfs_dir_default.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/cpukit/libfs/src/imfs/imfs_dir_default.c b/cpukit/libfs/src/imfs/imfs_dir_default.c
index 2f1207205a..b31a50e784 100644
--- a/cpukit/libfs/src/imfs/imfs_dir_default.c
+++ b/cpukit/libfs/src/imfs/imfs_dir_default.c
@@ -19,6 +19,7 @@
#include "imfs.h"
+#include <sys/param.h>
#include <dirent.h>
#include <string.h>
@@ -73,8 +74,10 @@ static ssize_t IMFS_dir_read(
dir_ent->d_off = current_entry;
dir_ent->d_reclen = sizeof( *dir_ent );
dir_ent->d_ino = IMFS_node_to_ino( imfs_node );
- dir_ent->d_namlen = imfs_node->namelen;
- memcpy( dir_ent->d_name, imfs_node->name, dir_ent->d_namlen + 1 );
+ dir_ent->d_namlen =
+ MIN( imfs_node->namelen, sizeof( dir_ent->d_name ) - 1 );
+ dir_ent->d_name[ dir_ent->d_namlen ] = '\0';
+ memcpy( dir_ent->d_name, imfs_node->name, dir_ent->d_namlen );
iop->offset += sizeof( *dir_ent );
bytes_transferred += (ssize_t) sizeof( *dir_ent );