From 8100cdeddfbbbc79dabff9919c4f8414444e2f5d Mon Sep 17 00:00:00 2001 From: Kevin Enderby Date: Mon, 24 Jul 2017 20:33:41 +0000 Subject: [PATCH] Small tweak to one check in error handling to the dyld compact export entries in libObject (done in r308690). In the case when the last node has no children setting State.Current = Children + 1; where that would be past Trie.end() is actually ok since the pointer is not used with zero children. rdar://33490512 llvm-svn: 308924 --- llvm/lib/Object/MachOObjectFile.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp index 8b85049ea634..579faf607c0b 100644 --- a/llvm/lib/Object/MachOObjectFile.cpp +++ b/llvm/lib/Object/MachOObjectFile.cpp @@ -2789,13 +2789,13 @@ void ExportEntry::pushNode(uint64_t offset) { return; } } - if (Children + 1 >= Trie.end()) { + State.ChildCount = *Children; + if (State.ChildCount != 0 && Children + 1 >= Trie.end()) { *E = malformedError("byte for count of childern in export trie data at " "node: 0x" + utohexstr(offset) + " extends past end of trie data"); moveToEnd(); return; } - State.ChildCount = *Children; State.Current = Children + 1; State.NextChildIndex = 0; State.ParentStringLength = CumulativeString.size();