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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user