From bff1ce32bc5ec768533abf7f28148ef796e4e7ca Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 4 Sep 2015 15:52:19 +0000 Subject: [PATCH] [NTFS] Don't bother comparing names if they have null length svn path=/trunk/; revision=69001 --- reactos/drivers/filesystems/ntfs/mft.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/reactos/drivers/filesystems/ntfs/mft.c b/reactos/drivers/filesystems/ntfs/mft.c index a28c811b174..a1a00bdc900 100644 --- a/reactos/drivers/filesystems/ntfs/mft.c +++ b/reactos/drivers/filesystems/ntfs/mft.c @@ -87,22 +87,36 @@ FindAttribute(PDEVICE_EXTENSION Vcb, ULONG NameLength, PNTFS_ATTR_CONTEXT * AttrCtx) { + BOOLEAN Found; NTSTATUS Status; FIND_ATTR_CONTXT Context; PNTFS_ATTR_RECORD Attribute; DPRINT("FindAttribute(%p, %p, 0x%x, %S, %u, %p)\n", Vcb, MftRecord, Type, Name, NameLength, AttrCtx); + Found = FALSE; Status = FindFirstAttribute(&Context, Vcb, MftRecord, FALSE, &Attribute); while (NT_SUCCESS(Status)) { if (Attribute->Type == Type && Attribute->NameLength == NameLength) { - PWCHAR AttrName; + if (NameLength != 0) + { + PWCHAR AttrName; - AttrName = (PWCHAR)((PCHAR)Attribute + Attribute->NameOffset); - DPRINT("%.*S, %.*S\n", Attribute->NameLength, AttrName, NameLength, Name); - if (RtlCompareMemory(AttrName, Name, NameLength << 1) == (NameLength << 1)) + AttrName = (PWCHAR)((PCHAR)Attribute + Attribute->NameOffset); + DPRINT("%.*S, %.*S\n", Attribute->NameLength, AttrName, NameLength, Name); + if (RtlCompareMemory(AttrName, Name, NameLength << 1) == (NameLength << 1)) + { + Found = TRUE; + } + } + else + { + Found = TRUE; + } + + if (Found) { /* Found it, fill up the context and return. */ DPRINT("Found context\n");