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_ino = offset;
|
||||||
dirent->d_pdev = volume->ID();
|
dirent->d_pdev = volume->ID();
|
||||||
dirent->d_pino = volume->ToVnode(inode->Parent());
|
dirent->d_pino = volume->ToVnode(inode->Parent());
|
||||||
|
dirent->d_reclen = sizeof(struct dirent);
|
||||||
|
|
||||||
if (inode->GetName(dirent->d_name) < B_OK) {
|
if (inode->GetName(dirent->d_name) < B_OK) {
|
||||||
FATAL(("inode %" B_PRIdOFF " in query has no name!\n",
|
FATAL(("inode %" B_PRIdOFF " in query has no name!\n",
|
||||||
inode->BlockNumber()));
|
inode->BlockNumber()));
|
||||||
|
} else {
|
||||||
|
dirent->d_reclen += strlen(dirent->d_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
dirent->d_reclen = sizeof(struct dirent) + strlen(dirent->d_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status == MATCH_OK)
|
if (status == MATCH_OK)
|
||||||
|
|||||||
Reference in New Issue
Block a user