[repacker] fix fuzzer timeout.
For https://oss-fuzz.com/testcase-detail/5845846876356608. Only process the set of unique overflows.
This commit is contained in:
parent
59451502e9
commit
dd1ba328a8
|
@ -33,6 +33,23 @@ struct overflow_record_t
|
||||||
{
|
{
|
||||||
unsigned parent;
|
unsigned parent;
|
||||||
unsigned child;
|
unsigned child;
|
||||||
|
|
||||||
|
bool operator != (const overflow_record_t o) const
|
||||||
|
{ return !(*this == o); }
|
||||||
|
|
||||||
|
inline bool operator == (const overflow_record_t& o) const
|
||||||
|
{
|
||||||
|
return parent == o.parent &&
|
||||||
|
child == o.child;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint32_t hash () const
|
||||||
|
{
|
||||||
|
uint32_t current = 0;
|
||||||
|
current = current * 31 + hb_hash (parent);
|
||||||
|
current = current * 31 + hb_hash (child);
|
||||||
|
return current;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline
|
inline
|
||||||
|
@ -94,6 +111,7 @@ will_overflow (graph_t& graph,
|
||||||
if (overflows) overflows->resize (0);
|
if (overflows) overflows->resize (0);
|
||||||
graph.update_positions ();
|
graph.update_positions ();
|
||||||
|
|
||||||
|
hb_hashmap_t<overflow_record_t*, bool> record_set;
|
||||||
const auto& vertices = graph.vertices_;
|
const auto& vertices = graph.vertices_;
|
||||||
for (int parent_idx = vertices.length - 1; parent_idx >= 0; parent_idx--)
|
for (int parent_idx = vertices.length - 1; parent_idx >= 0; parent_idx--)
|
||||||
{
|
{
|
||||||
|
@ -109,7 +127,10 @@ will_overflow (graph_t& graph,
|
||||||
overflow_record_t r;
|
overflow_record_t r;
|
||||||
r.parent = parent_idx;
|
r.parent = parent_idx;
|
||||||
r.child = link.objidx;
|
r.child = link.objidx;
|
||||||
|
if (record_set.has(&r)) continue; // don't keep duplicate overflows.
|
||||||
|
|
||||||
overflows->push (r);
|
overflows->push (r);
|
||||||
|
record_set.set(&r, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue