++edgeStrLen;
}
cummulativeString[curStrOffset+edgeStrLen] = *s++;
- uint32_t childNodeOffet = read_uleb128(s, end);
- processExportNode(start, start+childNodeOffet, end, cummulativeString, curStrOffset+edgeStrLen, output);
+ uint32_t childNodeOffset = read_uleb128(s, end);
+ if (childNodeOffset == 0)
+ throw "malformed trie, childNodeOffset==0";
+ processExportNode(start, start+childNodeOffset, end, cummulativeString, curStrOffset+edgeStrLen, output);
}
}
// empty trie has no entries
if ( start == end )
return;
- char cummulativeString[4000];
+ // worst case largest exported symbol names is length of whole trie
+ char* cummulativeString = new char[end-start];
std::vector<EntryWithOffset> entries;
processExportNode(start, start, end, cummulativeString, 0, entries);
// to preserve tie layout order, sort by node offset
output.reserve(entries.size());
for (std::vector<EntryWithOffset>::iterator it=entries.begin(); it != entries.end(); ++it)
output.push_back(it->entry);
+ delete cummulativeString;
}