Strengthened sanity checks on readdir/closedir

Be more defensive against readdir() on closed directories.
edge.strict_endians
Jean-Pierre André 2012-01-23 17:45:12 +01:00
parent ac8a980e7a
commit b25178fec3
1 changed files with 11 additions and 8 deletions

View File

@ -1092,14 +1092,17 @@ static void ntfs_fuse_releasedir(fuse_req_t req,
ntfs_fuse_fill_item_t *current;
fill = (ntfs_fuse_fill_context_t*)(long)fi->fh;
/* make sure to clear results */
current = fill->first;
while (current) {
current = current->next;
free(fill->first);
fill->first = current;
if (fill && (fill->ino == ino)) {
/* make sure to clear results */
current = fill->first;
while (current) {
current = current->next;
free(fill->first);
fill->first = current;
}
fill->ino = 0;
free(fill);
}
free(fill);
fuse_reply_err(req, 0);
}
@ -1115,7 +1118,7 @@ static void ntfs_fuse_readdir(fuse_req_t req, fuse_ino_t ino, size_t size,
int err = 0;
fill = (ntfs_fuse_fill_context_t*)(long)fi->fh;
if (fill) {
if (fill && (fill->ino == ino)) {
if (!fill->filled) {
/* initial call : build the full list */
first = (ntfs_fuse_fill_item_t*)ntfs_malloc