Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package hyperscan for openSUSE:Factory 
checked in at 2023-02-23 16:30:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/hyperscan (Old)
 and      /work/SRC/openSUSE:Factory/.hyperscan.new.1706 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "hyperscan"

Thu Feb 23 16:30:49 2023 rev:10 rq:1067416 version:5.4.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/hyperscan/hyperscan.changes      2022-10-15 
16:40:29.758591526 +0200
+++ /work/SRC/openSUSE:Factory/.hyperscan.new.1706/hyperscan.changes    
2023-02-23 16:54:30.341518316 +0100
@@ -1,0 +2,19 @@
+Tue Feb 21 22:54:42 UTC 2023 - Martin Hauke <mar...@gmx.de>
+
+- Update to version 5.4.1
+  Bugfixes:
+  * fix random char value of UTF-8.
+  * bypass logical combination flag in hs_expression_info().
+  * fix build error due to libc symbol parsing.
+  * add empty string check for pure literal API.
+  * fix unknown instruction error in pure literal API.
+  * avoid memory leak in stream close stage.
+  * fix assertion failure in DFA construction.
+  * fix aligned allocator segment faults.
+  * add quick validity check for scratch.
+  * fix glibc-2.34 stack size issue.
+  * fix SKIP flag issue in chimera.
+  * fix one cotec check corner issue in UTF-8 validation.
+  * Fix other compile issues.
+
+-------------------------------------------------------------------

Old:
----
  hyperscan-5.4.0.tar.gz

New:
----
  hyperscan-5.4.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ hyperscan.spec ++++++
--- /var/tmp/diff_new_pack.AIVytp/_old  2023-02-23 16:54:30.765520774 +0100
+++ /var/tmp/diff_new_pack.AIVytp/_new  2023-02-23 16:54:30.769520798 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package hyperscan
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %define _lto_cflags %{nil}
 %define sover 5
 Name:           hyperscan
-Version:        5.4.0
+Version:        5.4.1
 Release:        0
 Summary:        Regular expression matching library
 License:        BSD-3-Clause

++++++ hyperscan-5.4.0.tar.gz -> hyperscan-5.4.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/CHANGELOG.md 
new/hyperscan-5.4.1/CHANGELOG.md
--- old/hyperscan-5.4.0/CHANGELOG.md    2021-01-13 15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/CHANGELOG.md    2023-02-22 00:03:50.000000000 +0100
@@ -2,6 +2,23 @@
 
 This is a list of notable changes to Hyperscan, in reverse chronological order.
 
+## [5.4.1] 2023-02-20
+- The Intel Hyperscan team is pleased to provide a bug fix release to our open 
source library.
+  Intel also maintains an upgraded version available through your Intel sales 
representative.
+- Bugfix for issue #184: fix random char value of UTF-8.
+- Bugfix for issue #291: bypass logical combination flag in 
hs_expression_info().
+- Bugfix for issue #292: fix build error due to libc symbol parsing.
+- Bugfix for issue #302/304: add empty string check for pure literal API.
+- Bugfix for issue #303: fix unknown instruction error in pure literal API.
+- Bugfix for issue #303: avoid memory leak in stream close stage.
+- Bugfix for issue #305: fix assertion failure in DFA construction.
+- Bugfix for issue #317: fix aligned allocator segment faults.
+- Bugfix for issue #350: add quick validity check for scratch.
+- Bugfix for issue #359: fix glibc-2.34 stack size issue.
+- Bugfix for issue #360: fix SKIP flag issue in chimera.
+- Bugfix for issue #362: fix one cotec check corner issue in UTF-8 validation.
+- Fix other compile issues.
+
 ## [5.4.0] 2020-12-31
 - Improvement on literal matcher "Fat Teddy" performance, including
   support for Intel(R) AVX-512 Vector Byte Manipulation Instructions (Intel(R)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/CMakeLists.txt 
new/hyperscan-5.4.1/CMakeLists.txt
--- old/hyperscan-5.4.0/CMakeLists.txt  2021-01-13 15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/CMakeLists.txt  2023-02-22 00:03:50.000000000 +0100
@@ -3,7 +3,7 @@
 
 set (HS_MAJOR_VERSION 5)
 set (HS_MINOR_VERSION 4)
-set (HS_PATCH_VERSION 0)
+set (HS_PATCH_VERSION 1)
 set (HS_VERSION ${HS_MAJOR_VERSION}.${HS_MINOR_VERSION}.${HS_PATCH_VERSION})
 
 set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
@@ -397,6 +397,18 @@
     set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -Wno-unused-const-variable")
 endif()
 
+# clang-14 complains about unused-but-set variable.
+CHECK_CXX_COMPILER_FLAG("-Wunused-but-set-variable" CXX_UNUSED_BUT_SET_VAR)
+if (CXX_UNUSED_BUT_SET_VAR)
+    set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -Wno-unused-but-set-variable")
+endif()
+
+# clang-14 complains about using bitwise operator instead of logical ones.
+CHECK_CXX_COMPILER_FLAG("-Wbitwise-instead-of-logical" 
CXX_BITWISE_INSTEAD_OF_LOGICAL)
+if (CXX_BITWISE_INSTEAD_OF_LOGICAL)
+    set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -Wno-bitwise-instead-of-logical")
+endif()
+
 # gcc 6 complains about type attributes that get ignored, like alignment
 CHECK_CXX_COMPILER_FLAG("-Wignored-attributes" CXX_IGNORED_ATTR)
 if (CXX_IGNORED_ATTR)
@@ -428,8 +440,10 @@
 
 # gcc 10 complains about this
 CHECK_C_COMPILER_FLAG("-Wstringop-overflow" CC_STRINGOP_OVERFLOW)
-if(CC_STRINGOP_OVERFLOW)
+CHECK_CXX_COMPILER_FLAG("-Wstringop-overflow" CXX_STRINGOP_OVERFLOW)
+if(CC_STRINGOP_OVERFLOW OR CXX_STRINGOP_OVERFLOW)
     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wno-stringop-overflow")
+    set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -Wno-stringop-overflow")
 endif()
 
 endif()
@@ -579,7 +593,7 @@
 
 set (hs_exec_SRCS
     ${hs_HEADERS}
-    src/hs_version.h
+    src/hs_version.h.in
     src/ue2common.h
     src/allocator.h
     src/crc32.c
@@ -736,7 +750,7 @@
     src/grey.h
     src/hs.cpp
     src/hs_internal.h
-    src/hs_version.h
+    src/hs_version.h.in
     src/scratch.h
     src/state.h
     src/ue2common.h
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/chimera/ch_runtime.c 
new/hyperscan-5.4.1/chimera/ch_runtime.c
--- old/hyperscan-5.4.0/chimera/ch_runtime.c    2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/chimera/ch_runtime.c    2023-02-22 00:03:50.000000000 
+0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018-2020, Intel Corporation
+ * Copyright (c) 2018-2022, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -326,6 +326,10 @@
         } else if (cbrv == CH_CALLBACK_SKIP_PATTERN) {
             DEBUG_PRINTF("user callback told us to skip this pattern\n");
             pd->scanStart = hyctx->length;
+            if (top_id == id) {
+                break;
+            }
+            continue;
         }
 
         if (top_id == id) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/cmake/build_wrapper.sh 
new/hyperscan-5.4.1/cmake/build_wrapper.sh
--- old/hyperscan-5.4.0/cmake/build_wrapper.sh  2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/cmake/build_wrapper.sh  2023-02-22 00:03:50.000000000 
+0100
@@ -17,7 +17,7 @@
 LIBC_SO=$("$@" --print-file-name=libc.so.6)
 cp ${KEEPSYMS_IN} ${KEEPSYMS}
 # get all symbols from libc and turn them into patterns
-nm -f p -g -D ${LIBC_SO} | sed -s 's/\([^ ]*\).*/^\1$/' >> ${KEEPSYMS}
+nm -f p -g -D ${LIBC_SO} | sed -s 's/\([^ @]*\).*/^\1$/' >> ${KEEPSYMS}
 # build the object
 "$@"
 # rename the symbols in the object
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/examples/patbench.cc 
new/hyperscan-5.4.1/examples/patbench.cc
--- old/hyperscan-5.4.0/examples/patbench.cc    2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/examples/patbench.cc    2023-02-22 00:03:50.000000000 
+0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2017, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -115,6 +115,7 @@
 #include <algorithm>
 #include <cstring>
 #include <chrono>
+#include <climits>
 #include <fstream>
 #include <iomanip>
 #include <iostream>
@@ -657,6 +658,10 @@
             break;
         case 'n':
             repeatCount = atoi(optarg);
+            if (repeatCount <= 0 || repeatCount > UINT_MAX) {
+                cerr << "Invalid repeatCount." << endl;
+                exit(-1);
+            }
             break;
         default:
             usage(argv[0]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/examples/pcapscan.cc 
new/hyperscan-5.4.1/examples/pcapscan.cc
--- old/hyperscan-5.4.0/examples/pcapscan.cc    2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/examples/pcapscan.cc    2023-02-22 00:03:50.000000000 
+0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2016, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -51,6 +51,7 @@
 
 #include <cstring>
 #include <chrono>
+#include <climits>
 #include <fstream>
 #include <iomanip>
 #include <iostream>
@@ -489,6 +490,10 @@
 
     // Streaming mode scans.
     double secsStreamingScan = 0.0, secsStreamingOpenClose = 0.0;
+    if (repeatCount <= 0 || repeatCount > UINT_MAX) {
+        cerr << "Invalid repeatCount." << endl;
+        exit(-1);
+    }
     for (unsigned int i = 0; i < repeatCount; i++) {
         // Open streams.
         clock.start();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/examples/simplegrep.c 
new/hyperscan-5.4.1/examples/simplegrep.c
--- old/hyperscan-5.4.0/examples/simplegrep.c   2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/examples/simplegrep.c   2023-02-22 00:03:50.000000000 
+0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -57,6 +57,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 
 #include <hs.h>
 
@@ -152,6 +153,15 @@
     char *pattern = argv[1];
     char *inputFN = argv[2];
 
+    if (access(inputFN, F_OK) != 0) {
+        fprintf(stderr, "ERROR: file doesn't exist.\n");
+        return -1;
+    }
+    if (access(inputFN, R_OK) != 0) {
+        fprintf(stderr, "ERROR: can't be read.\n");
+        return -1;
+    }
+
     /* First, we attempt to compile the pattern provided on the command line.
      * We assume 'DOTALL' semantics, meaning that the '.' meta-character will
      * match newline characters. The compiler will analyse the given pattern 
and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/compiler/compiler.cpp 
new/hyperscan-5.4.1/src/compiler/compiler.cpp
--- old/hyperscan-5.4.0/src/compiler/compiler.cpp       2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/compiler/compiler.cpp       2023-02-22 
00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2020, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -323,7 +323,8 @@
     }
 
     // Ensure that our pattern isn't too long (in characters).
-    if (strlen(expression) > cc.grey.limitPatternLength) {
+    size_t maxlen = cc.grey.limitPatternLength + 1;
+    if (strnlen(expression, maxlen) >= maxlen) {
         throw CompileError("Pattern length exceeds limit.");
     }
 
@@ -416,6 +417,10 @@
                            "HS_FLAG_SOM_LEFTMOST are supported in literal 
API.");
     }
 
+    if (!strcmp(expression, "")) {
+        throw CompileError("Pure literal API doesn't support empty string.");
+    }
+
     // This expression must be a pure literal, we can build ue2_literal
     // directly based on expression text.
     ParsedLitExpression ple(index, expression, expLength, flags, id);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/hs.cpp 
new/hyperscan-5.4.1/src/hs.cpp
--- old/hyperscan-5.4.0/src/hs.cpp      2021-01-13 15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/hs.cpp      2023-02-22 00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2020, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -514,6 +514,12 @@
         return HS_COMPILER_ERROR;
     }
 
+    if (flags & HS_FLAG_COMBINATION) {
+        *error = generateCompileError("Invalid parameter: unsupported "
+                                      "logical combination expression", -1);
+        return HS_COMPILER_ERROR;
+    }
+
     *info = nullptr;
     *error = nullptr;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/hs.h new/hyperscan-5.4.1/src/hs.h
--- old/hyperscan-5.4.0/src/hs.h        2021-01-13 15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/hs.h        2023-02-22 00:03:50.000000000 +0100
@@ -43,7 +43,7 @@
 
 #define HS_MAJOR      5
 #define HS_MINOR      4
-#define HS_PATCH      0
+#define HS_PATCH      1
 
 #include "hs_compile.h"
 #include "hs_runtime.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/hs_compile.h 
new/hyperscan-5.4.1/src/hs_compile.h
--- old/hyperscan-5.4.0/src/hs_compile.h        2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/src/hs_compile.h        2023-02-22 00:03:50.000000000 
+0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2020, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -748,10 +748,7 @@
  *       - HS_FLAG_PREFILTER - Compile pattern in prefiltering mode.
  *       - HS_FLAG_SOM_LEFTMOST - Report the leftmost start of match offset
  *                                when a match is found.
- *       - HS_FLAG_COMBINATION - Parse the expression in logical combination
- *                               syntax.
- *       - HS_FLAG_QUIET - Ignore match reporting for this expression. Used for
- *                         the sub-expressions in logical combinations.
+ *       - HS_FLAG_QUIET - This flag will be ignored.
  *
  * @param info
  *      On success, a pointer to the pattern information will be returned in
@@ -814,10 +811,7 @@
  *       - HS_FLAG_PREFILTER - Compile pattern in prefiltering mode.
  *       - HS_FLAG_SOM_LEFTMOST - Report the leftmost start of match offset
  *                                when a match is found.
- *       - HS_FLAG_COMBINATION - Parse the expression in logical combination
- *                               syntax.
- *       - HS_FLAG_QUIET - Ignore match reporting for this expression. Used for
- *                         the sub-expressions in logical combinations.
+ *       - HS_FLAG_QUIET - This flag will be ignored.
  *
  * @param ext
  *      A pointer to a filled @ref hs_expr_ext_t structure that defines
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/hs_internal.h 
new/hyperscan-5.4.1/src/hs_internal.h
--- old/hyperscan-5.4.0/src/hs_internal.h       2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/src/hs_internal.h       2023-02-22 00:03:50.000000000 
+0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, Intel Corporation
+ * Copyright (c) 2019-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -80,7 +80,9 @@
                     | HS_FLAG_PREFILTER \
                     | HS_FLAG_SINGLEMATCH \
                     | HS_FLAG_ALLOWEMPTY \
-                    | HS_FLAG_SOM_LEFTMOST)
+                    | HS_FLAG_SOM_LEFTMOST \
+                    | HS_FLAG_COMBINATION \
+                    | HS_FLAG_QUIET)
 
 #ifdef __cplusplus
 } /* extern "C" */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/hwlm/noodle_engine_sse.c 
new/hyperscan-5.4.1/src/hwlm/noodle_engine_sse.c
--- old/hyperscan-5.4.0/src/hwlm/noodle_engine_sse.c    2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/hwlm/noodle_engine_sse.c    2023-02-22 
00:03:50.000000000 +0100
@@ -106,7 +106,7 @@
     if (!l) {
         return HWLM_SUCCESS;
     }
-    assert(l <= 32);
+    assert(l <= 16);
 
     DEBUG_PRINTF("d %zu\n", d - buf);
     m128 v = zeroes128();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/nfa/goughcompile.cpp 
new/hyperscan-5.4.1/src/nfa/goughcompile.cpp
--- old/hyperscan-5.4.0/src/nfa/goughcompile.cpp        2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/nfa/goughcompile.cpp        2023-02-22 
00:03:50.000000000 +0100
@@ -207,6 +207,10 @@
             assert(contains(src_slots, slot_id));
 
             shared_ptr<GoughSSAVarMin> vmin = make_shared<GoughSSAVarMin>();
+            if (!vmin) {
+                assert(0);
+                throw std::bad_alloc();
+            }
             cfg[e].vars.push_back(vmin);
             final_var = vmin.get();
 
@@ -318,6 +322,10 @@
             DEBUG_PRINTF("bypassing min on join %u\n", slot_id);
         } else {
             shared_ptr<GoughSSAVarMin> vmin = make_shared<GoughSSAVarMin>();
+            if (!vmin) {
+                assert(0);
+                throw std::bad_alloc();
+            }
             cfg[e].vars.push_back(vmin);
             final_var = vmin.get();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/nfa/mcclellancompile.cpp 
new/hyperscan-5.4.1/src/nfa/mcclellancompile.cpp
--- old/hyperscan-5.4.0/src/nfa/mcclellancompile.cpp    2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/nfa/mcclellancompile.cpp    2023-02-22 
00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2020, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -1082,7 +1082,9 @@
         // Use the daddy already set for this state so long as it isn't already
         // a Sherman state.
         dstate_id_t daddy = currState.daddy;
-        if (!info.is_sherman(daddy) && !info.is_widestate(daddy)) {
+        if (info.is_widestate(daddy)) {
+            return;
+        } else if (!info.is_sherman(daddy)) {
             hinted.insert(currState.daddy);
         } else {
             // Fall back to granddaddy, which has already been processed (due
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/nfa/nfa_dump_dispatch.cpp 
new/hyperscan-5.4.1/src/nfa/nfa_dump_dispatch.cpp
--- old/hyperscan-5.4.0/src/nfa/nfa_dump_dispatch.cpp   2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/nfa/nfa_dump_dispatch.cpp   2023-02-22 
00:03:50.000000000 +0100
@@ -75,6 +75,7 @@
         DISPATCH_CASE(LBR_NFA_VERM, LbrVerm, dbnt_func);                       
\
         DISPATCH_CASE(LBR_NFA_NVERM, LbrNVerm, dbnt_func);                     
\
         DISPATCH_CASE(LBR_NFA_SHUF, LbrShuf, dbnt_func);                       
\
+        DISPATCH_CASE(LBR_NFA_VSHUF, LbrVShuf, dbnt_func);                     
\
         DISPATCH_CASE(LBR_NFA_TRUF, LbrTruf, dbnt_func);                       
\
         DISPATCH_CASE(CASTLE_NFA, Castle, dbnt_func);                          
\
         DISPATCH_CASE(SHENG_NFA, Sheng, dbnt_func);                            
\
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/nfa/repeatcompile.cpp 
new/hyperscan-5.4.1/src/nfa/repeatcompile.cpp
--- old/hyperscan-5.4.0/src/nfa/repeatcompile.cpp       2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/nfa/repeatcompile.cpp       2023-02-22 
00:03:50.000000000 +0100
@@ -124,6 +124,10 @@
                                  const depth &repeatMax, u32 minPeriod)
     : stateSize(0), packedCtrlSize(0), horizon(0), patchCount(0),
       patchSize(0), encodingSize(0), patchesOffset(0) {
+    if (type == REPEAT_SPARSE_OPTIMAL_P && minPeriod == 0) {
+        assert(0);
+        throw std::domain_error("SPARSE_OPTIMAL_P must have non-zero 
minPeriod.");
+    }
     assert(repeatMin <= repeatMax);
     assert(repeatMax.is_reachable());
     assert(minPeriod || type != REPEAT_SPARSE_OPTIMAL_P);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/nfagraph/ng_som.cpp 
new/hyperscan-5.4.1/src/nfagraph/ng_som.cpp
--- old/hyperscan-5.4.0/src/nfagraph/ng_som.cpp 2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/src/nfagraph/ng_som.cpp 2023-02-22 00:03:50.000000000 
+0100
@@ -2446,6 +2446,10 @@
 bool doLitHaigSom(NG &ng, NGHolder &g, som_type som) {
     ue2_literal lit;
     shared_ptr<NGHolder> rhs = make_shared<NGHolder>();
+    if (!rhs) {
+        assert(0);
+        throw std::bad_alloc();
+    }
     if (!ng.cc.grey.allowLitHaig) {
         return false;
     }
@@ -2510,6 +2514,11 @@
     ue2_literal lit;
     shared_ptr<NGHolder> rhs = make_shared<NGHolder>();
     shared_ptr<NGHolder> lhs = make_shared<NGHolder>();
+    if (!rhs || !lhs) {
+        assert(0);
+        throw std::bad_alloc();
+    }
+
     if (!splitOffBestLiteral(g, regions, &lit, &*lhs, &*rhs, ng.cc)) {
         return false;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/nfagraph/ng_violet.cpp 
new/hyperscan-5.4.1/src/nfagraph/ng_violet.cpp
--- old/hyperscan-5.4.0/src/nfagraph/ng_violet.cpp      2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/nfagraph/ng_violet.cpp      2023-02-22 
00:03:50.000000000 +0100
@@ -1036,6 +1036,11 @@
     shared_ptr<NGHolder> lhs = make_shared<NGHolder>();
     shared_ptr<NGHolder> rhs = make_shared<NGHolder>();
 
+    if (!lhs || !rhs) {
+        assert(0);
+        throw std::bad_alloc();
+    }
+
     unordered_map<NFAVertex, NFAVertex> lhs_map;
     unordered_map<NFAVertex, NFAVertex> rhs_map;
 
@@ -1229,6 +1234,10 @@
             DEBUG_PRINTF("splitting on pivot %zu\n", h[pivot].index);
             unordered_map<NFAVertex, NFAVertex> temp_map;
             shared_ptr<NGHolder> new_lhs = make_shared<NGHolder>();
+            if (!new_lhs) {
+                assert(0);
+                throw std::bad_alloc();
+            }
             splitLHS(h, pivot, new_lhs.get(), &temp_map);
 
             /* want to cut off paths to pivot from things other than the pivot 
-
@@ -1310,6 +1319,10 @@
             if (!contains(done_rhs, adj)) {
                 unordered_map<NFAVertex, NFAVertex> temp_map;
                 shared_ptr<NGHolder> new_rhs = make_shared<NGHolder>();
+                if (!new_rhs) {
+                    assert(0);
+                    throw std::bad_alloc();
+                }
                 splitRHS(h, adj, new_rhs.get(), &temp_map);
                 remove_edge(new_rhs->start, new_rhs->accept, *new_rhs);
                 remove_edge(new_rhs->start, new_rhs->acceptEod, *new_rhs);
@@ -2281,6 +2294,10 @@
     assert(!splitters.empty());
 
     shared_ptr<NGHolder> lhs = make_shared<NGHolder>();
+    if (!lhs) {
+        assert(0);
+        throw bad_alloc();
+    }
     unordered_map<NFAVertex, NFAVertex> v_map;
     cloneHolder(*lhs, base_graph, &v_map);
     lhs->kind = NFA_INFIX;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/parser/logical_combination.cpp 
new/hyperscan-5.4.1/src/parser/logical_combination.cpp
--- old/hyperscan-5.4.0/src/parser/logical_combination.cpp      2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/parser/logical_combination.cpp      2023-02-22 
00:03:50.000000000 +0100
@@ -140,7 +140,8 @@
         }
         hs_compile_error_t *compile_err = NULL;
         hs_expr_info_t *info = NULL;
-        hs_error_t err = hs_expression_info(expressions[i], flags[i], &info,
+        hs_error_t err = hs_expression_info(expressions[i],
+                                            flags ? flags[i] : 0, &info,
                                             &compile_err);
         if (err != HS_SUCCESS) {
             hs_free_compile_error(compile_err);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/parser/utf8_validate.cpp 
new/hyperscan-5.4.1/src/parser/utf8_validate.cpp
--- old/hyperscan-5.4.0/src/parser/utf8_validate.cpp    2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/parser/utf8_validate.cpp    2023-02-22 
00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2022, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -72,7 +72,7 @@
     while (i < len) {
         DEBUG_PRINTF("byte %zu: 0x%02x\n", i, s[i]);
         // One octet.
-        if (s[i] < 0x7f) {
+        if (s[i] <= 0x7f) {
             DEBUG_PRINTF("one octet\n");
             i++;
             continue;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/rose/program_runtime.c 
new/hyperscan-5.4.1/src/rose/program_runtime.c
--- old/hyperscan-5.4.0/src/rose/program_runtime.c      2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/rose/program_runtime.c      2023-02-22 
00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2020, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -3110,6 +3110,7 @@
 
     const char in_catchup = prog_flags & ROSE_PROG_FLAG_IN_CATCHUP;
     const char from_mpv = prog_flags & ROSE_PROG_FLAG_FROM_MPV;
+    const char skip_mpv_catchup = prog_flags & ROSE_PROG_FLAG_SKIP_MPV_CATCHUP;
 
     const char *pc_base = getByOffset(t, programOffset);
     const char *pc = pc_base;
@@ -3206,6 +3207,17 @@
             }
             L_PROGRAM_NEXT_INSTRUCTION
 
+            L_PROGRAM_CASE(CATCH_UP_MPV) {
+                if (from_mpv || skip_mpv_catchup) {
+                    DEBUG_PRINTF("skipping mpv catchup\n");
+                } else if (roseCatchUpMPV(t,
+                                          end - scratch->core_info.buf_offset,
+                                          scratch) == HWLM_TERMINATE_MATCHING) 
{
+                    return HWLM_TERMINATE_MATCHING;
+                }
+            }
+            L_PROGRAM_NEXT_INSTRUCTION
+
             L_PROGRAM_CASE(SOM_FROM_REPORT) {
                 som = handleSomExternal(scratch, &ri->som, end);
                 DEBUG_PRINTF("som from report %u is %llu\n", ri->som.onmatch,
@@ -3213,6 +3225,15 @@
             }
             L_PROGRAM_NEXT_INSTRUCTION
 
+            L_PROGRAM_CASE(TRIGGER_SUFFIX) {
+                if (roseTriggerSuffix(t, scratch, ri->queue, ri->event, som,
+                                      end) == HWLM_TERMINATE_MATCHING) {
+                    return HWLM_TERMINATE_MATCHING;
+                }
+                work_done = 1;
+            }
+            L_PROGRAM_NEXT_INSTRUCTION
+
             L_PROGRAM_CASE(DEDUPE) {
                 updateSeqPoint(tctxt, end, from_mpv);
                 const char do_som = t->hasSom; // TODO: constant propagate
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/rose/rose_build_convert.cpp 
new/hyperscan-5.4.1/src/rose/rose_build_convert.cpp
--- old/hyperscan-5.4.0/src/rose/rose_build_convert.cpp 2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/rose/rose_build_convert.cpp 2023-02-22 
00:03:50.000000000 +0100
@@ -562,6 +562,10 @@
     DEBUG_PRINTF("woot?\n");
 
     shared_ptr<NGHolder> h_new = make_shared<NGHolder>();
+    if (!h_new) {
+        assert(0);
+        throw std::bad_alloc();
+    }
     unordered_map<NFAVertex, NFAVertex> rhs_map;
     vector<NFAVertex> exits_vec;
     insert(&exits_vec, exits_vec.end(), exits);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/runtime.c 
new/hyperscan-5.4.1/src/runtime.c
--- old/hyperscan-5.4.0/src/runtime.c   2021-01-13 15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/runtime.c   2023-02-22 00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2019, Intel Corporation
+ * Copyright (c) 2015-2022, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -90,7 +90,7 @@
  * callers.
  */
 static really_inline
-char validScratch(const struct RoseEngine *t, const struct hs_scratch *s) {
+char validScratch(const struct hs_scratch *s, u32 crc) {
     if (!ISALIGNED_CL(s)) {
         DEBUG_PRINTF("bad alignment %p\n", s);
         return 0;
@@ -101,18 +101,12 @@
         return 0;
     }
 
-    if (t->mode == HS_MODE_BLOCK && t->stateOffsets.end > s->bStateSize) {
-        DEBUG_PRINTF("bad state size\n");
+    /* add quick rose sanity checks by db crc*/
+    if (s->db_crc != crc) {
+        DEBUG_PRINTF("Improper scratch for current db\n");
         return 0;
     }
 
-    if (t->queueCount > s->queueCount) {
-        DEBUG_PRINTF("bad queue count\n");
-        return 0;
-    }
-
-    /* TODO: add quick rose sanity checks */
-
     return 1;
 }
 
@@ -335,7 +329,7 @@
         return HS_DB_MODE_ERROR;
     }
 
-    if (unlikely(!validScratch(rose, scratch))) {
+    if (unlikely(!validScratch(scratch, db->crc32))) {
         return HS_INVALID;
     }
 
@@ -509,7 +503,7 @@
 
 static really_inline
 void init_stream(struct hs_stream *s, const struct RoseEngine *rose,
-                 char init_history) {
+                 char init_history, u32 crc) {
     char *state = getMultiState(s);
 
     if (init_history) {
@@ -524,6 +518,7 @@
 
     s->rose = rose;
     s->offset = 0;
+    s->crc32 = crc;
 
     setStreamStatus(state, 0);
     roseInitState(rose, state);
@@ -568,7 +563,7 @@
         return HS_NOMEM;
     }
 
-    init_stream(s, rose, 1);
+    init_stream(s, rose, 1, db->crc32);
 
     *stream = s;
     return HS_SUCCESS;
@@ -756,7 +751,7 @@
     }
 
     if (onEvent) {
-        if (!scratch || !validScratch(to_id->rose, scratch)) {
+        if (!scratch || !validScratch(scratch, to_id->crc32)) {
             return HS_INVALID;
         }
         if (unlikely(markScratchInUse(scratch))) {
@@ -982,7 +977,7 @@
                                    hs_scratch_t *scratch,
                                    match_event_handler onEvent, void *context) 
{
     if (unlikely(!id || !scratch || !data ||
-                 !validScratch(id->rose, scratch))) {
+                 !validScratch(scratch, id->crc32))) {
         return HS_INVALID;
     }
 
@@ -1004,7 +999,7 @@
     }
 
     if (onEvent) {
-        if (!scratch || !validScratch(id->rose, scratch)) {
+        if (!scratch || !validScratch(scratch, id->crc32)) {
             return HS_INVALID;
         }
         if (unlikely(markScratchInUse(scratch))) {
@@ -1013,6 +1008,7 @@
         report_eod_matches(id, scratch, onEvent, context);
         if (unlikely(internal_matching_error(scratch))) {
             unmarkScratchInUse(scratch);
+            hs_stream_free(id);
             return HS_UNKNOWN_ERROR;
         }
         unmarkScratchInUse(scratch);
@@ -1033,7 +1029,7 @@
     }
 
     if (onEvent) {
-        if (!scratch || !validScratch(id->rose, scratch)) {
+        if (!scratch || !validScratch(scratch, id->crc32)) {
             return HS_INVALID;
         }
         if (unlikely(markScratchInUse(scratch))) {
@@ -1048,7 +1044,7 @@
     }
 
     // history already initialised
-    init_stream(id, id->rose, 0);
+    init_stream(id, id->rose, 0, id->crc32);
 
     return HS_SUCCESS;
 }
@@ -1127,7 +1123,7 @@
         return HS_DB_MODE_ERROR;
     }
 
-    if (unlikely(!validScratch(rose, scratch))) {
+    if (unlikely(!validScratch(scratch, db->crc32))) {
         return HS_INVALID;
     }
 
@@ -1137,7 +1133,7 @@
 
     hs_stream_t *id = (hs_stream_t *)(scratch->bstate);
 
-    init_stream(id, rose, 1); /* open stream */
+    init_stream(id, rose, 1, db->crc32); /* open stream */
 
     for (u32 i = 0; i < count; i++) {
         DEBUG_PRINTF("block %u/%u offset=%llu len=%u\n", i, count, id->offset,
@@ -1252,7 +1248,7 @@
     const struct RoseEngine *rose = to_stream->rose;
 
     if (onEvent) {
-        if (!scratch || !validScratch(to_stream->rose, scratch)) {
+        if (!scratch || !validScratch(scratch, to_stream->crc32)) {
             return HS_INVALID;
         }
         if (unlikely(markScratchInUse(scratch))) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/scratch.c 
new/hyperscan-5.4.1/src/scratch.c
--- old/hyperscan-5.4.0/src/scratch.c   2021-01-13 15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/scratch.c   2023-02-22 00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2019, Intel Corporation
+ * Copyright (c) 2015-2022, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -373,6 +373,7 @@
             hs_scratch_free((*scratch)->scratch_alloc);
         }
 
+        proto->db_crc = db->crc32;
         hs_error_t alloc_ret = alloc_scratch(proto, scratch);
         hs_scratch_free(proto_tmp); /* kill off temp used for sizing */
         if (alloc_ret != HS_SUCCESS) {
@@ -380,6 +381,7 @@
             return alloc_ret;
         }
     } else {
+        (*scratch)->db_crc = db->crc32;
         hs_scratch_free(proto_tmp); /* kill off temp used for sizing */
         unmarkScratchInUse(*scratch);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/scratch.h 
new/hyperscan-5.4.1/src/scratch.h
--- old/hyperscan-5.4.0/src/scratch.h   2021-01-13 15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/scratch.h   2023-02-22 00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2019, Intel Corporation
+ * Copyright (c) 2015-2022, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -171,6 +171,7 @@
  */
 struct ALIGN_CL_DIRECTIVE hs_scratch {
     u32 magic;
+    u32 db_crc; /**< identity of a scratch space, for validity check */
     u8 in_use; /**< non-zero when being used by an API call. */
     u32 queueCount;
     u32 activeQueueArraySize; /**< size of active queue array fatbit in bytes 
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/smallwrite/smallwrite_build.cpp 
new/hyperscan-5.4.1/src/smallwrite/smallwrite_build.cpp
--- old/hyperscan-5.4.0/src/smallwrite/smallwrite_build.cpp     2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/smallwrite/smallwrite_build.cpp     2023-02-22 
00:03:50.000000000 +0100
@@ -78,7 +78,7 @@
 struct LitTrieVertexProps {
     LitTrieVertexProps() = default;
     explicit LitTrieVertexProps(u8 c_in) : c(c_in) {}
-    size_t index; // managed by ue2_graph
+    size_t index = 0; // managed by ue2_graph
     u8 c = 0; //!< character reached on this vertex
     flat_set<ReportID> reports; //!< managed reports fired on this vertex
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/state.h 
new/hyperscan-5.4.1/src/state.h
--- old/hyperscan-5.4.0/src/state.h     2021-01-13 15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/state.h     2023-02-22 00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2022, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -57,6 +57,9 @@
 
     /** \brief The current stream offset. */
     u64a offset;
+
+    /** \brief Identity of hs_stream, for scratch validity check. */
+    u32 crc32;
 };
 
 #define getMultiState(hs_s)      ((char *)(hs_s) + sizeof(*(hs_s)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/stream_compress_impl.h 
new/hyperscan-5.4.1/src/stream_compress_impl.h
--- old/hyperscan-5.4.0/src/stream_compress_impl.h      2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/stream_compress_impl.h      2023-02-22 
00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2018, Intel Corporation
+ * Copyright (c) 2017-2022, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -116,6 +116,7 @@
         = ((STREAM_QUAL char *)stream) + sizeof(struct hs_stream);
 
     COPY_FIELD(stream->offset);
+    COPY_FIELD(stream->crc32);
     ASSIGN(stream->rose, rose);
 
     COPY(stream_body + ROSE_STATE_OFFSET_STATUS_FLAGS, 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/util/alloc.h 
new/hyperscan-5.4.1/src/util/alloc.h
--- old/hyperscan-5.4.0/src/util/alloc.h        2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/src/util/alloc.h        2023-02-22 00:03:50.000000000 
+0100
@@ -76,7 +76,11 @@
 
     T *allocate(std::size_t size) const {
         size_t alloc_size = size * sizeof(T);
-        return static_cast<T *>(aligned_malloc_internal(alloc_size, N));
+        T *ptr = static_cast<T *>(aligned_malloc_internal(alloc_size, N));
+        if (!ptr) {
+            throw std::bad_alloc();
+        }
+        return ptr;
     }
 
     void deallocate(T *x, std::size_t) const noexcept {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/util/graph_undirected.h 
new/hyperscan-5.4.1/src/util/graph_undirected.h
--- old/hyperscan-5.4.0/src/util/graph_undirected.h     2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/src/util/graph_undirected.h     2023-02-22 
00:03:50.000000000 +0100
@@ -70,8 +70,8 @@
     using base_vertex_type = typename base_graph_traits::vertex_descriptor;
 
     base_edge_type underlying_edge;
-    const base_graph_type *g;
-    bool reverse; // if true, reverse vertices in source() and target()
+    const base_graph_type *g = nullptr;
+    bool reverse = false; // if true, reverse vertices in source() and target()
 
     inline std::pair<base_vertex_type, base_vertex_type>
     canonical_edge() const {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/util/simd_utils.h 
new/hyperscan-5.4.1/src/util/simd_utils.h
--- old/hyperscan-5.4.0/src/util/simd_utils.h   2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/src/util/simd_utils.h   2023-02-22 00:03:50.000000000 
+0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2020, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -156,6 +156,16 @@
     return _mm_cvtsi128_si32(in);
 }
 
+static really_inline u64a movq(const m128 in) {
+#if defined(ARCH_X86_64)
+    return _mm_cvtsi128_si64(in);
+#else // 32-bit - this is horrific
+    u32 lo = movd(in);
+    u32 hi = movd(_mm_srli_epi64(in, 32));
+    return (u64a)hi << 32 | lo;
+#endif
+}
+
 #if defined(HAVE_AVX512)
 static really_inline u32 movd512(const m512 in) {
     // NOTE: seems gcc doesn't support _mm512_cvtsi512_si32(in),
@@ -166,20 +176,10 @@
 static really_inline u64a movq512(const m512 in) {
     // NOTE: seems AVX512 doesn't support _mm512_cvtsi512_si64(in),
     //       so we use 2-step convertions to work around.
-    return _mm_cvtsi128_si64(_mm512_castsi512_si128(in));
+    return movq(_mm512_castsi512_si128(in));
 }
 #endif
 
-static really_inline u64a movq(const m128 in) {
-#if defined(ARCH_X86_64)
-    return _mm_cvtsi128_si64(in);
-#else // 32-bit - this is horrific
-    u32 lo = movd(in);
-    u32 hi = movd(_mm_srli_epi64(in, 32));
-    return (u64a)hi << 32 | lo;
-#endif
-}
-
 /* another form of movq */
 static really_inline
 m128 load_m128_from_u64a(const u64a *p) {
@@ -791,7 +791,7 @@
 #define lshift128_m256(a, count_immed) _mm256_slli_si256(a, count_immed)
 #define extract64from256(a, imm) _mm_extract_epi64(_mm256_extracti128_si256(a, 
imm >> 1), imm % 2)
 #define extract32from256(a, imm) _mm_extract_epi32(_mm256_extracti128_si256(a, 
imm >> 2), imm % 4)
-#define extractlow64from256(a) _mm_cvtsi128_si64(cast256to128(a))
+#define extractlow64from256(a) movq(cast256to128(a))
 #define extractlow32from256(a) movd(cast256to128(a))
 #define interleave256hi(a, b) _mm256_unpackhi_epi8(a, b)
 #define interleave256lo(a, b) _mm256_unpacklo_epi8(a, b)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/src/util/ue2string.h 
new/hyperscan-5.4.1/src/util/ue2string.h
--- old/hyperscan-5.4.0/src/util/ue2string.h    2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/src/util/ue2string.h    2023-02-22 00:03:50.000000000 
+0100
@@ -133,7 +133,7 @@
             : lit(&lit_in), idx(idx_in) {}
 
         const ue2_literal *lit = nullptr;
-        size_t idx;
+        size_t idx = 0;
     };
 
     using const_reverse_iterator = std::reverse_iterator<const_iterator>;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/tools/hsbench/data_corpus.cpp 
new/hyperscan-5.4.1/tools/hsbench/data_corpus.cpp
--- old/hyperscan-5.4.0/tools/hsbench/data_corpus.cpp   2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/tools/hsbench/data_corpus.cpp   2023-02-22 
00:03:50.000000000 +0100
@@ -58,7 +58,10 @@
     }
     auto internal_stream_index = stream_indices[stream_id];
 
-    assert(blob || bytes > 0);
+    if (!(blob &&  bytes > 0)) {
+        assert(0);
+        throw std::domain_error("Invalid blob or bytes from sqlite3.");
+    }
     blocks.emplace_back(id, stream_id, internal_stream_index,
                         string(blob, blob + bytes));
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/tools/hsbench/main.cpp 
new/hyperscan-5.4.1/tools/hsbench/main.cpp
--- old/hyperscan-5.4.0/tools/hsbench/main.cpp  2021-01-13 15:39:34.000000000 
+0100
+++ new/hyperscan-5.4.1/tools/hsbench/main.cpp  2023-02-22 00:03:50.000000000 
+0100
@@ -760,6 +760,11 @@
         total += block.payload.size();
     }
 
+    if (total == 0) {
+        assert(0);
+        throw std::invalid_argument("Empty corpus.");
+    }
+
     return total;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/tools/hscollider/DatabaseProxy.h 
new/hyperscan-5.4.1/tools/hscollider/DatabaseProxy.h
--- old/hyperscan-5.4.0/tools/hscollider/DatabaseProxy.h        2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/tools/hscollider/DatabaseProxy.h        2023-02-22 
00:03:50.000000000 +0100
@@ -61,7 +61,7 @@
         std::lock_guard<std::mutex> lock(mutex);
         if (failed) {
             // We have previously failed to compile this database.
-            return nullptr;
+            throw CompileFailed("Unable to compile db previously.");
         }
         if (db) {
             return db;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hyperscan-5.4.0/tools/hscollider/NfaGeneratedCorpora.cpp 
new/hyperscan-5.4.1/tools/hscollider/NfaGeneratedCorpora.cpp
--- old/hyperscan-5.4.0/tools/hscollider/NfaGeneratedCorpora.cpp        
2021-01-13 15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/tools/hscollider/NfaGeneratedCorpora.cpp        
2023-02-22 00:03:50.000000000 +0100
@@ -101,7 +101,7 @@
         pl.logicalKeyRenumber();
         const auto &m_lkey = pl.getLkeyMap();
         assert(!m_lkey.empty());
-        u32 a_subid; // arbitrary sub id
+        u32 a_subid = 0; // arbitrary sub id
         unordered_map<u32, vector<Corpus>> m_data;
         for (const auto &it : m_lkey) {
             a_subid = it.first;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/tools/hscollider/Thread.cpp 
new/hyperscan-5.4.1/tools/hscollider/Thread.cpp
--- old/hyperscan-5.4.0/tools/hscollider/Thread.cpp     2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/tools/hscollider/Thread.cpp     2023-02-22 
00:03:50.000000000 +0100
@@ -98,6 +98,6 @@
 }
 
 
-Thread::Thread(size_t num) : thread_id(num) {}
+Thread::Thread(size_t num) : thread_id(num), thread() {}
 
 Thread::~Thread() {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/tools/hscollider/args.cpp 
new/hyperscan-5.4.1/tools/hscollider/args.cpp
--- old/hyperscan-5.4.0/tools/hscollider/args.cpp       2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/tools/hscollider/args.cpp       2023-02-22 
00:03:50.000000000 +0100
@@ -503,8 +503,8 @@
                 } else if (in_corpora) {
                     corpora->push_back(optarg);
                     in_corpora = 2;
-                    break;
                 }
+                break;
             case 0:
                 break;
             default:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/tools/hscollider/sig.cpp 
new/hyperscan-5.4.1/tools/hscollider/sig.cpp
--- old/hyperscan-5.4.0/tools/hscollider/sig.cpp        2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/tools/hscollider/sig.cpp        2023-02-22 
00:03:50.000000000 +0100
@@ -38,6 +38,7 @@
 
 #if defined(HAVE_SIGACTION) || defined(_WIN32)
 #include <signal.h>
+#define STACK_SIZE 8192 // linux kernel default stack size for x86
 #endif
 
 #ifdef HAVE_BACKTRACE
@@ -175,7 +176,7 @@
 }
 
 #ifdef HAVE_SIGALTSTACK
-static TLS_VARIABLE char alt_stack_loc[SIGSTKSZ];
+static TLS_VARIABLE char alt_stack_loc[STACK_SIZE];
 #endif
 
 void setSignalStack(void) {
@@ -187,7 +188,7 @@
     stack_t alt_stack;
     memset(&alt_stack, 0, sizeof(alt_stack));
     alt_stack.ss_flags = 0;
-    alt_stack.ss_size = SIGSTKSZ;
+    alt_stack.ss_size = STACK_SIZE;
     alt_stack.ss_sp = alt_stack_loc;
     if (!sigaltstack(&alt_stack, nullptr)) {
         act.sa_flags |= SA_ONSTACK;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/unit/hyperscan/single.cpp 
new/hyperscan-5.4.1/unit/hyperscan/single.cpp
--- old/hyperscan-5.4.0/unit/hyperscan/single.cpp       2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/unit/hyperscan/single.cpp       2023-02-22 
00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2016, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -363,8 +363,9 @@
 // Mode bits for switching off various architecture features
 static const unsigned long long featureMask[] = {
     ~0ULL, /* native */
-    ~(HS_CPU_FEATURES_AVX2 | HS_CPU_FEATURES_AVX512), /* no avx2 */
-    ~HS_CPU_FEATURES_AVX512, /* no avx512 */
+    ~(HS_CPU_FEATURES_AVX2 | HS_CPU_FEATURES_AVX512 | 
HS_CPU_FEATURES_AVX512VBMI), /* no avx2 */
+    ~(HS_CPU_FEATURES_AVX512 | HS_CPU_FEATURES_AVX512VBMI), /* no avx512 */
+    ~HS_CPU_FEATURES_AVX512VBMI, /* no avx512vbmi */
 };
 
 INSTANTIATE_TEST_CASE_P(Single,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/unit/internal/database.cpp 
new/hyperscan-5.4.1/unit/internal/database.cpp
--- old/hyperscan-5.4.0/unit/internal/database.cpp      2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/unit/internal/database.cpp      2023-02-22 
00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2017, Intel Corporation
+ * Copyright (c) 2015-2021, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -56,6 +56,10 @@
     p.cpu_features |= HS_CPU_FEATURES_AVX512;
 #endif
 
+#if defined(HAVE_AVX512VBMI)
+    p.cpu_features |= HS_CPU_FEATURES_AVX512VBMI;
+#endif
+
     platform_t pp = target_to_platform(target_t(p));
     ASSERT_EQ(pp, hs_current_platform);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/unit/internal/utf8_validate.cpp 
new/hyperscan-5.4.1/unit/internal/utf8_validate.cpp
--- old/hyperscan-5.4.0/unit/internal/utf8_validate.cpp 2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/unit/internal/utf8_validate.cpp 2023-02-22 
00:03:50.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2017, Intel Corporation
+ * Copyright (c) 2015-2022, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -64,8 +64,8 @@
     {"공동경비구역", true},
     {"জলসাঘর", true},
 
-    // Invalid one-byte caseS.
-    {"\x7f", false},
+    // Valid one-byte caseS.
+    {"\x7f", true}, // \x7f is valid
 
     // These bytes should never appear in a UTF-8 stream.
     {"\xc0", false},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/util/ng_corpus_editor.cpp 
new/hyperscan-5.4.1/util/ng_corpus_editor.cpp
--- old/hyperscan-5.4.0/util/ng_corpus_editor.cpp       2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/util/ng_corpus_editor.cpp       2023-02-22 
00:03:50.000000000 +0100
@@ -268,12 +268,12 @@
 unichar CorpusEditorUtf8::chooseCodePoint(void) {
     /* We need to ensure that we don't pick a surrogate cp */
     const u32 range =
-        MAX_UNICODE + 1 - (UNICODE_SURROGATE_MAX + UNICODE_SURROGATE_MIN + 1);
+        MAX_UNICODE + 1 - (UNICODE_SURROGATE_MAX - UNICODE_SURROGATE_MIN + 1);
     unichar raw = props.rand(0, range - 1);
     if (raw < UNICODE_SURROGATE_MIN) {
         return raw;
     } else {
-        return raw + UNICODE_SURROGATE_MAX + 1;
+        return raw + UNICODE_SURROGATE_MAX - UNICODE_SURROGATE_MIN + 1;
     }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/util/ng_corpus_generator.cpp 
new/hyperscan-5.4.1/util/ng_corpus_generator.cpp
--- old/hyperscan-5.4.0/util/ng_corpus_generator.cpp    2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/util/ng_corpus_generator.cpp    2023-02-22 
00:03:50.000000000 +0100
@@ -477,14 +477,14 @@
  * that we've been asked for. */
 unichar CorpusGeneratorUtf8::getRandomChar() {
     u32 range = MAX_UNICODE + 1
-                - (UNICODE_SURROGATE_MAX + UNICODE_SURROGATE_MIN + 1);
+                - (UNICODE_SURROGATE_MAX - UNICODE_SURROGATE_MIN + 1);
     range = min(cProps.alphabetSize, range);
     assert(range);
 
     unichar c = 'a' + cProps.rand(0, range - 1);
 
     if (c >= UNICODE_SURROGATE_MIN) {
-        c =+ UNICODE_SURROGATE_MAX + 1;
+        c += UNICODE_SURROGATE_MAX - UNICODE_SURROGATE_MIN + 1;
     }
 
     return c % (MAX_UNICODE + 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperscan-5.4.0/util/ng_corpus_properties.cpp 
new/hyperscan-5.4.1/util/ng_corpus_properties.cpp
--- old/hyperscan-5.4.0/util/ng_corpus_properties.cpp   2021-01-13 
15:39:34.000000000 +0100
+++ new/hyperscan-5.4.1/util/ng_corpus_properties.cpp   2023-02-22 
00:03:50.000000000 +0100
@@ -42,7 +42,7 @@
     : matchness(100), unmatchness(0), randomness(0), prefixRange(0, 0),
       suffixRange(0, 0), cycleMin(1), cycleMax(1),
       corpusLimit(DEFAULT_CORPUS_GENERATOR_LIMIT), editDistance(0),
-      alphabetSize(~0) {
+      alphabetSize(~0), rngSeed(0) {
     // empty
 }
 

Reply via email to