We have just pushed Hyperscan 4.2.1 and 4.3.1 to Github. These releases are bugfix releases for the same bug.
The change log entry:
- Bugfix for issue #30. In recent versions of Clang, a write to a variable was being elided, resulting in corrupted stream state after calling hs_reset_stream().
>From our testing this only affects Hyperscan built with more recent releases of the Clang compiler (after Clang v3.6), this does not affect GCC or ICC builds.
We have just pushed Hyperscan 4.3.0 to Github. Here is the list of changes since 4.2 (from the changelog):
* Introduce a new analysis pass ("Violet") used for decomposition of patterns into literals and smaller engines.
* Introduce a new container engine ("Tamarama") for infix and suffix engines that can be proven to run exclusively of one another. This reduces stream state for pattern sets with many such engines.
* Introduce a new shuffle-based DFA engine ("Sheng"). This improves scanning performance for pattern sets where small engines are generated.
* Improve the analysis used to extract extra mask information from short literals.
* Reduced compile time spent in equivalence class analysis.
* Build: frame pointers are now only omitted for 32-bit release builds.
* Build: Workaround for C++ issues reported on FreeBSD/libc++ platforms. (github issue #27)
* Simplify the LimEx NFA with a unified "variable shift" model, which reduces the number of different NFA code paths to one per model size.
* Allow some anchored prefixes that may squash the literal to which they are attached to run eagerly. This improves scanning performance for some patterns.
* Simplify and improve EOD ("end of data") matching, using the interpreter for all operations.
* Elide unnecessary instructions in the Rose interpreter at compile time.
* Reduce the number of inlined instantiations of the Rose interpreter in order to reduce instruction cache pressure.
* Small improvements to literal matcher acceleration.
* Parser: ignore \E metacharacters that are not preceded by \Q. This conforms to PCRE's behaviour, rather than returning a compile error.
* Check for misaligned memory when allocating an error structure in Hyperscan's compile path and return an appropriate error if detected.