diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-03-16 20:28:20 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-03-17 16:18:03 +0100 |
commit | e6f4a612d85cab1ac19cd04925eb96c157d75424 (patch) | |
tree | 19dfbdf6df182cc1394cf4463c9b39b32262a997 /cpukit | |
parent | 72d3f1a65ee8cfded448eb0bdae00e50078bfdb1 (diff) |
IMFS: NUL-terminate name returned by readdir()
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_dir_default.c | 7 |
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 ); |