bfs: keep valid dirent->d_reclen in case of bad name

Fixes #15607.

Change-Id: I96b807f031df4e5c8b5ae17b22a21aed77616b17
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2083
Reviewed-by: Axel Dörfler <[email protected]>
This commit is contained in:
X512
2020-01-08 20:05:58 +00:00
committed by Axel Dörfler
parent d27b2393eb
commit 3e818f2075
@@ -667,13 +667,14 @@ Equation::GetNextMatching(Volume* volume, TreeIterator* iterator,
dirent->d_ino = offset;
dirent->d_pdev = volume->ID();
dirent->d_pino = volume->ToVnode(inode->Parent());
dirent->d_reclen = sizeof(struct dirent);
if (inode->GetName(dirent->d_name) < B_OK) {
FATAL(("inode %" B_PRIdOFF " in query has no name!\n",
inode->BlockNumber()));
} else {
dirent->d_reclen += strlen(dirent->d_name);
}
dirent->d_reclen = sizeof(struct dirent) + strlen(dirent->d_name);
}
if (status == MATCH_OK)