mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-07-10 04:24:43 +03:00
ng_fuzzy: apply a resource limit to vertex count
This commit is contained in:
parent
ffab97ca8c
commit
533fcf383d
@ -156,7 +156,8 @@ Grey::Grey(void) :
|
|||||||
limitEngineSize(1073741824), // 1 GB
|
limitEngineSize(1073741824), // 1 GB
|
||||||
limitDFASize(1073741824), // 1 GB
|
limitDFASize(1073741824), // 1 GB
|
||||||
limitNFASize(1048576), // 1 MB
|
limitNFASize(1048576), // 1 MB
|
||||||
limitLBRSize(1048576) // 1 MB
|
limitLBRSize(1048576), // 1 MB
|
||||||
|
limitApproxMatchingVertices(5000)
|
||||||
{
|
{
|
||||||
assert(maxAnchoredRegion < 64); /* a[lm]_log_sum have limited capacity */
|
assert(maxAnchoredRegion < 64); /* a[lm]_log_sum have limited capacity */
|
||||||
}
|
}
|
||||||
@ -317,6 +318,7 @@ void applyGreyOverrides(Grey *g, const string &s) {
|
|||||||
G_UPDATE(limitDFASize);
|
G_UPDATE(limitDFASize);
|
||||||
G_UPDATE(limitNFASize);
|
G_UPDATE(limitNFASize);
|
||||||
G_UPDATE(limitLBRSize);
|
G_UPDATE(limitLBRSize);
|
||||||
|
G_UPDATE(limitApproxMatchingVertices);
|
||||||
|
|
||||||
#undef G_UPDATE
|
#undef G_UPDATE
|
||||||
if (key == "simple_som") {
|
if (key == "simple_som") {
|
||||||
|
@ -201,6 +201,9 @@ struct Grey {
|
|||||||
u32 limitDFASize; //!< max size of a DFA (in bytes)
|
u32 limitDFASize; //!< max size of a DFA (in bytes)
|
||||||
u32 limitNFASize; //!< max size of an NFA (in bytes)
|
u32 limitNFASize; //!< max size of an NFA (in bytes)
|
||||||
u32 limitLBRSize; //!< max size of an LBR engine (in bytes)
|
u32 limitLBRSize; //!< max size of an LBR engine (in bytes)
|
||||||
|
|
||||||
|
// Approximate matching limits.
|
||||||
|
u32 limitApproxMatchingVertices; //!< max number of vertices per graph
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef RELEASE_BUILD
|
#ifndef RELEASE_BUILD
|
||||||
|
@ -665,13 +665,23 @@ void validate_fuzzy_compile(const NGHolder &g, u32 edit_distance, bool utf8,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void make_fuzzy(NGHolder &g, u32 edit_distance, UNUSED const Grey &grey) {
|
void make_fuzzy(NGHolder &g, u32 edit_distance, const Grey &grey) {
|
||||||
if (edit_distance == 0) {
|
if (edit_distance == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(grey.allowApproximateMatching);
|
assert(grey.allowApproximateMatching);
|
||||||
assert(grey.maxEditDistance >= edit_distance);
|
assert(grey.maxEditDistance >= edit_distance);
|
||||||
|
|
||||||
ShadowGraph sg(g, edit_distance);
|
ShadowGraph sg(g, edit_distance);
|
||||||
sg.fuzz_graph();
|
sg.fuzz_graph();
|
||||||
|
|
||||||
|
// For safety, enforce limit on actual vertex count.
|
||||||
|
if (num_vertices(g) > grey.limitApproxMatchingVertices) {
|
||||||
|
DEBUG_PRINTF("built %zu vertices > limit of %u\n", num_vertices(g),
|
||||||
|
grey.limitApproxMatchingVertices);
|
||||||
|
throw ResourceLimitError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
} // namespace ue2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user