From 37593af2840854a0588f366dfad14d75ba26dfc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 22 May 2007 09:07:58 +0000 Subject: [PATCH] Fixed a memory leak in _SplitNode() spotted by Stefano - thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21200 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp b/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp index 7013a383b2..304d687358 100644 --- a/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp +++ b/src/add-ons/kernel/file_systems/bfs/BPlusTree.cpp @@ -1117,6 +1117,8 @@ BPlusTree::_SplitNode(bplustree_node *node, off_t nodeOffset, newKey = (uint8 *)malloc(newLength); if (newKey == NULL) return B_NO_MEMORY; + + newAllocated = true; memcpy(newKey, droppedKey, newLength); other->overflow_link = inKeyValues[in]; @@ -1168,8 +1170,11 @@ BPlusTree::_SplitNode(bplustree_node *node, off_t nodeOffset, } else if (keyIndex < skip) bytesBefore = node->AllKeyLength() - total; - if (bytesBefore < 0 || bytesAfter < 0) + if (bytesBefore < 0 || bytesAfter < 0) { + if (newAllocated) + free(newKey); return B_BAD_DATA; + } node->left_link = HOST_ENDIAN_TO_BFS_INT64(otherOffset); // right link, and overflow link can stay the same