const CallData& callData) { ... ArrayStorage* storage = m_storage; // ArrayStorage を保持してしまっている ... unsigned usedVectorLength = min(storage->m_length, m_vectorLength); unsigned nodeCount = usedVectorLength + (storage->m_sparseValueMap ? storage->m_sparseValueMap->size() : 0); AVL木を用意して配列の要素の数のノードを確保して、 ... AVLTree<AVLTreeAbstractorForArrayCompare, 44> tree; // Depth 44 is enough for 2^31 items tree.abstractor().m_exec = exec; tree.abstractor().m_compareFunction = compareFunction; ... tree.abstractor().m_nodes.grow(nodeCount); // ノード数が決定されてしまう if (callType == CallTypeJS) tree.abstractor().m_cachedCall = adoptPtr(new CachedCall(exec, asFunction(compareFunction), 2)); ... Pwning Old Webkit for Fun and Profit ― Security.Tokyo #1 13