mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-10-08 23:32:23 +03:00
Fixed out of bounds read in AVX512VBMI version of fdr_exec_fat_teddy … (#333)
Fixed out of bounds read in AVX512VBMI version of fdr_exec_fat_teddy (#322) * Replaced the 32 byte read with a properly truncated mapped read * Added a unit test Co-authored-by: Rafał Dowgird <rafal.dowgird@rtbhouse.com>
This commit is contained in:
@@ -34,7 +34,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
|
||||
#include <sys/mman.h>
|
||||
using namespace std;
|
||||
using namespace testing;
|
||||
|
||||
@@ -631,5 +631,29 @@ const TerminateMatchData terminateCases[] = {
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Single, HyperscanTestMatchTerminate, ValuesIn(terminateCases));
|
||||
|
||||
TEST(OutOfBoundRead, mmap) {
|
||||
const char* pattern = "bat|cat|mat|rat|fat|sat|pat|hat|vat";
|
||||
const char* corpus = "VAt hat pat sat fat rat mat ca";
|
||||
|
||||
// Use mmap to reliably get corpus at the and of mapped memory region
|
||||
size_t buffer_len = (128<<20);
|
||||
char* buffer = (char*) mmap(NULL, buffer_len * 2, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
munmap(buffer+buffer_len, buffer_len);
|
||||
char* mmaped_corpus = strcpy(buffer + buffer_len - strlen(corpus) - 1, corpus);
|
||||
|
||||
hs_error_t err;
|
||||
hs_scratch_t *scratch = nullptr;
|
||||
hs_database_t *db = buildDBAndScratch(pattern, HS_FLAG_CASELESS, 0, HS_MODE_BLOCK, &scratch);
|
||||
|
||||
int count = 0;
|
||||
err = hs_scan(db, mmaped_corpus, strlen(mmaped_corpus), 0, scratch, countHandler, &count);
|
||||
ASSERT_EQ(HS_SUCCESS, err) << "hs_scan didn't return HS_SCAN_TERMINATED";
|
||||
|
||||
err = hs_free_scratch(scratch);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
hs_free_database(db);
|
||||
munmap(buffer, buffer_len);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
|
Reference in New Issue
Block a user