Author: tthompson Date: Tue Jul 4 21:47:43 2017 New Revision: 75280 URL: http://svn.reactos.org/svn/reactos?rev=75280&view=rev Log: [NTFS] - Add some fixes and improvements to btree.c from CR-123: -CompareTreeKeys() - Assert that the first key isn't the dummy key. -CreateIndexRootFromBTree() - Assert that CurrentKey->IndexEntry->Length isn't 0. -DumpBTreeKey() - Use sizeof(WCHAR) in place of magic 2. -NtfsInsertKey() - Check for allocation failure of NewKey.
Modified: branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/btree.c Modified: branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/btree.c URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/btree.c?rev=75280&r1=75279&r2=75280&view=diff ============================================================================== --- branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/btree.c [iso-8859-1] (original) +++ branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/btree.c [iso-8859-1] Tue Jul 4 21:47:43 2017 @@ -61,6 +61,8 @@ { UNICODE_STRING Key1Name, Key2Name; LONG Comparison; + + ASSERT(!(Key1->IndexEntry->Flags & NTFS_INDEX_ENTRY_END)); // If Key2 is the "dummy key", key 1 will always come first if (Key2->NextKey == NULL) @@ -322,11 +324,10 @@ return STATUS_NOT_IMPLEMENTED; } + ASSERT(CurrentKey->IndexEntry->Length != 0); + // Copy the index entry - if (CurrentKey->IndexEntry->Length > 0) - RtlCopyMemory(CurrentNodeEntry, CurrentKey->IndexEntry, CurrentKey->IndexEntry->Length); - else - DPRINT1("DRIVER ERROR: CurrentKey->IndexEntry->Length <= 0 !\n"); + RtlCopyMemory(CurrentNodeEntry, CurrentKey->IndexEntry, CurrentKey->IndexEntry->Length); DPRINT1("Index Node Entry Stream Length: %u\nIndex Node Entry Length: %u\n", CurrentNodeEntry->KeyLength, @@ -409,7 +410,7 @@ if (!(Key->IndexEntry->Flags & NTFS_INDEX_ENTRY_END)) { UNICODE_STRING FileName; - FileName.Length = Key->IndexEntry->FileName.NameLength * 2; + FileName.Length = Key->IndexEntry->FileName.NameLength * sizeof(WCHAR); FileName.MaximumLength = FileName.Length; FileName.Buffer = Key->IndexEntry->FileName.Name; DbgPrint(" '%wZ'\n", &FileName); @@ -514,6 +515,12 @@ // Setup the New Key NewKey = ExAllocatePoolWithTag(NonPagedPool, sizeof(B_TREE_KEY), TAG_NTFS); + if (!NewKey) + { + DPRINT1("ERROR: Failed to allocate memory for new key!\n"); + ExFreePoolWithTag(NewEntry, TAG_NTFS); + return STATUS_INSUFFICIENT_RESOURCES; + } NewKey->IndexEntry = NewEntry; NewKey->NextKey = NULL;