mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
parent
5f930b267c
commit
18f6aee5c2
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Intel Corporation
|
* Copyright (c) 2018-2020, Intel Corporation
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@ -345,6 +345,16 @@ ch_error_t HS_CDECL ch_set_scratch_allocator(ch_alloc_t alloc_func,
|
|||||||
*/
|
*/
|
||||||
#define CH_SCRATCH_IN_USE (-10)
|
#define CH_SCRATCH_IN_USE (-10)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unexpected internal error from Hyperscan.
|
||||||
|
*
|
||||||
|
* This error indicates that there was unexpected matching behaviors from
|
||||||
|
* Hyperscan. This could be related to invalid usage of scratch space or
|
||||||
|
* invalid memory operations by users.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define CH_UNKNOWN_HS_ERROR (-13)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returned when pcre_exec (called for some expressions internally from @ref
|
* Returned when pcre_exec (called for some expressions internally from @ref
|
||||||
* ch_scan) failed due to a fatal error.
|
* ch_scan) failed due to a fatal error.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Intel Corporation
|
* Copyright (c) 2018-2020, Intel Corporation
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@ -419,6 +419,7 @@ int HS_CDECL multiCallback(unsigned int id, unsigned long long from,
|
|||||||
DEBUG_PRINTF("user callback told us to skip this pattern\n");
|
DEBUG_PRINTF("user callback told us to skip this pattern\n");
|
||||||
pd->scanStart = hyctx->length;
|
pd->scanStart = hyctx->length;
|
||||||
ret = HS_SUCCESS;
|
ret = HS_SUCCESS;
|
||||||
|
hyctx->scratch->ret = ret;
|
||||||
} else if (ret == CH_FAIL_INTERNAL) {
|
} else if (ret == CH_FAIL_INTERNAL) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -590,11 +591,24 @@ ch_error_t ch_scan_i(const ch_database_t *hydb,
|
|||||||
|
|
||||||
if (!(db->flags & CHIMERA_FLAG_NO_MULTIMATCH)) {
|
if (!(db->flags & CHIMERA_FLAG_NO_MULTIMATCH)) {
|
||||||
ret = scanHyperscan(&hyctx, data, length);
|
ret = scanHyperscan(&hyctx, data, length);
|
||||||
if (ret != HS_SUCCESS && scratch->ret != CH_SUCCESS) {
|
// Errors from pcre scan.
|
||||||
DEBUG_PRINTF("Hyperscan returned error %d\n", scratch->ret);
|
if (scratch->ret == CH_CALLBACK_TERMINATE) {
|
||||||
|
DEBUG_PRINTF("Pcre terminates scan\n");
|
||||||
|
unmarkScratchInUse(scratch);
|
||||||
|
return CH_SCAN_TERMINATED;
|
||||||
|
} else if (scratch->ret != CH_SUCCESS) {
|
||||||
|
DEBUG_PRINTF("Pcre internal error\n");
|
||||||
unmarkScratchInUse(scratch);
|
unmarkScratchInUse(scratch);
|
||||||
return scratch->ret;
|
return scratch->ret;
|
||||||
}
|
}
|
||||||
|
// Errors from Hyperscan scan. Note Chimera could terminate
|
||||||
|
// Hyperscan callback on purpose so this is not counted as an error.
|
||||||
|
if (ret != HS_SUCCESS && ret != HS_SCAN_TERMINATED) {
|
||||||
|
assert(scratch->ret == CH_SUCCESS);
|
||||||
|
DEBUG_PRINTF("Hyperscan returned error %d\n", ret);
|
||||||
|
unmarkScratchInUse(scratch);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG_PRINTF("Flush priority queue\n");
|
DEBUG_PRINTF("Flush priority queue\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user