mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-10-02 04:27:42 +03:00
Prevent trying to build smallwrite engine for large cases
This commit is contained in:
@@ -65,7 +65,8 @@ namespace { // unnamed
|
||||
// Concrete impl class
|
||||
class SmallWriteBuildImpl : public SmallWriteBuild {
|
||||
public:
|
||||
SmallWriteBuildImpl(const ReportManager &rm, const CompileContext &cc);
|
||||
SmallWriteBuildImpl(size_t num_patterns, const ReportManager &rm,
|
||||
const CompileContext &cc);
|
||||
|
||||
// Construct a runtime implementation.
|
||||
aligned_unique_ptr<SmallWriteEngine> build(u32 roseQuality) override;
|
||||
@@ -87,11 +88,14 @@ public:
|
||||
|
||||
SmallWriteBuild::~SmallWriteBuild() { }
|
||||
|
||||
SmallWriteBuildImpl::SmallWriteBuildImpl(const ReportManager &rm_in,
|
||||
SmallWriteBuildImpl::SmallWriteBuildImpl(size_t num_patterns,
|
||||
const ReportManager &rm_in,
|
||||
const CompileContext &cc_in)
|
||||
: rm(rm_in), cc(cc_in),
|
||||
/* small write is block mode only */
|
||||
poisoned(!cc.grey.allowSmallWrite || cc.streaming) {
|
||||
poisoned(!cc.grey.allowSmallWrite
|
||||
|| cc.streaming
|
||||
|| num_patterns > cc.grey.smallWriteMaxPatterns) {
|
||||
}
|
||||
|
||||
void SmallWriteBuildImpl::add(const NGWrapper &w) {
|
||||
@@ -163,6 +167,10 @@ void SmallWriteBuildImpl::add(const ue2_literal &literal, ReportID r) {
|
||||
}
|
||||
|
||||
cand_literals.push_back(make_pair(literal, r));
|
||||
|
||||
if (cand_literals.size() > cc.grey.smallWriteMaxLiterals) {
|
||||
poisoned = true;
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
@@ -181,6 +189,7 @@ void lit_to_graph(NGHolder *h, const ue2_literal &literal, ReportID r) {
|
||||
bool SmallWriteBuildImpl::determiniseLiterals() {
|
||||
DEBUG_PRINTF("handling literals\n");
|
||||
assert(!poisoned);
|
||||
assert(cand_literals.size() <= cc.grey.smallWriteMaxLiterals);
|
||||
|
||||
if (cand_literals.empty()) {
|
||||
return true; /* nothing to do */
|
||||
@@ -352,9 +361,10 @@ aligned_unique_ptr<NFA> prepEngine(raw_dfa &rdfa, u32 roseQuality,
|
||||
}
|
||||
|
||||
// SmallWriteBuild factory
|
||||
unique_ptr<SmallWriteBuild> makeSmallWriteBuilder(const ReportManager &rm,
|
||||
unique_ptr<SmallWriteBuild> makeSmallWriteBuilder(size_t num_patterns,
|
||||
const ReportManager &rm,
|
||||
const CompileContext &cc) {
|
||||
return ue2::make_unique<SmallWriteBuildImpl>(rm, cc);
|
||||
return ue2::make_unique<SmallWriteBuildImpl>(num_patterns, rm, cc);
|
||||
}
|
||||
|
||||
aligned_unique_ptr<SmallWriteEngine>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Intel Corporation
|
||||
* Copyright (c) 2015-2016, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
@@ -64,7 +64,8 @@ public:
|
||||
};
|
||||
|
||||
// Construct a usable SmallWrite builder.
|
||||
std::unique_ptr<SmallWriteBuild> makeSmallWriteBuilder(const ReportManager &rm,
|
||||
std::unique_ptr<SmallWriteBuild> makeSmallWriteBuilder(size_t num_patterns,
|
||||
const ReportManager &rm,
|
||||
const CompileContext &cc);
|
||||
|
||||
size_t smwrSize(const SmallWriteEngine *t);
|
||||
|
Reference in New Issue
Block a user