[Pcre-svn] [1095] code/trunk/src/pcre2_jit_compile.c: Fix pr…

Top Page
Delete this message
Author: Subversion repository
Date:  
To: pcre-svn
Subject: [Pcre-svn] [1095] code/trunk/src/pcre2_jit_compile.c: Fix previous patch for non-JIT compilation.
Revision: 1095
          http://www.exim.org/viewvc/pcre2?view=rev&revision=1095
Author:   ph10
Date:     2019-05-25 17:31:38 +0100 (Sat, 25 May 2019)
Log Message:
-----------
Fix previous patch for non-JIT compilation.


Modified Paths:
--------------
    code/trunk/src/pcre2_jit_compile.c


Modified: code/trunk/src/pcre2_jit_compile.c
===================================================================
--- code/trunk/src/pcre2_jit_compile.c    2019-05-24 17:15:48 UTC (rev 1094)
+++ code/trunk/src/pcre2_jit_compile.c    2019-05-25 16:31:38 UTC (rev 1095)
@@ -6,7 +6,7 @@
 and semantics are as close as possible to those of the Perl 5 language.


                        Written by Philip Hazel
-                    This module by Zoltan Herczeg 
+                    This module by Zoltan Herczeg
      Original API code Copyright (c) 1997-2012 University of Cambridge
           New API code Copyright (c) 2016-2019 University of Cambridge


@@ -14152,39 +14152,40 @@
pcre2_jit_compile(pcre2_code *code, uint32_t options)
{
pcre2_real_code *re = (pcre2_real_code *)code;
-executable_functions *functions;

+#ifdef SUPPORT_JIT
+executable_functions *functions = (executable_functions *)re->executable_jit;
+#endif
+
if (code == NULL)
return PCRE2_ERROR_NULL;

if ((options & ~PUBLIC_JIT_COMPILE_OPTIONS) != 0)
return PCRE2_ERROR_JIT_BADOPTION;
-
-functions = (executable_functions *)re->executable_jit;

-/* Support for invalid UTF was first introduced in JIT, with the option
-PCRE2_JIT_INVALID_UTF. Later, support was added to the interpreter, and the
-compile-time option PCRE2_MATCH_INVALID_UTF was created. This is now the
-preferred feature, with the earlier option deprecated. However, for backward
-compatibility, if the earlier option is set, it forces the new option so that
-if JIT matching falls back to the interpreter, there is still support for
+/* Support for invalid UTF was first introduced in JIT, with the option
+PCRE2_JIT_INVALID_UTF. Later, support was added to the interpreter, and the
+compile-time option PCRE2_MATCH_INVALID_UTF was created. This is now the
+preferred feature, with the earlier option deprecated. However, for backward
+compatibility, if the earlier option is set, it forces the new option so that
+if JIT matching falls back to the interpreter, there is still support for
invalid UTF. However, if this function has already been successfully called
-without PCRE2_JIT_INVALID_UTF and without PCRE2_MATCH_INVALID_UTF (meaning that
-non-invalid-supporting JIT code was compiled), give an error.
+without PCRE2_JIT_INVALID_UTF and without PCRE2_MATCH_INVALID_UTF (meaning that
+non-invalid-supporting JIT code was compiled), give an error.

-If in the future support for PCRE2_JIT_INVALID_UTF is withdrawn, the following
+If in the future support for PCRE2_JIT_INVALID_UTF is withdrawn, the following
actions are needed:

   1. Remove the definition from pcre2.h.in and from the list in
      PUBLIC_JIT_COMPILE_OPTIONS above.
-     
+
   2. Replace PCRE2_JIT_INVALID_UTF with a local flag in this module.
-  
+
   3. Replace PCRE2_JIT_INVALID_UTF in pcre2_jit_test.c.
-  
-  4. Delete the following short block of code. The setting of "re" and 
-     "functions" can be moved into the JIT-only block below, but if that is 
-     done, (void)re and (void)functions will be needed in the non-JIT case, to 
+
+  4. Delete the following short block of code. The setting of "re" and
+     "functions" can be moved into the JIT-only block below, but if that is
+     done, (void)re and (void)functions will be needed in the non-JIT case, to
      avoid compiler warnings.
 */


@@ -14192,13 +14193,15 @@
   {
   if ((re->overall_options & PCRE2_MATCH_INVALID_UTF) == 0)
     {
+#ifdef SUPPORT_JIT
     if (functions != NULL) return PCRE2_ERROR_JIT_BADOPTION;
-    re->overall_options |= PCRE2_MATCH_INVALID_UTF; 
-    }  
+#endif
+    re->overall_options |= PCRE2_MATCH_INVALID_UTF;
+    }
   }
-  
-/* The above tests are run with and without JIT support. This means that 
-PCRE2_JIT_INVALID_UTF propagates back into the regex options (ensuring 
+
+/* The above tests are run with and without JIT support. This means that
+PCRE2_JIT_INVALID_UTF propagates back into the regex options (ensuring
 interpreter support) even in the absence of JIT. But now, if there is no JIT
 support, give an error return. */


@@ -14210,8 +14213,8 @@

 if ((re->flags & PCRE2_NOJIT) != 0) return 0;
 if ((re->overall_options & PCRE2_MATCH_INVALID_UTF) != 0)
-  options |= PCRE2_JIT_INVALID_UTF;  
-  
+  options |= PCRE2_JIT_INVALID_UTF;
+
 if ((options & PCRE2_JIT_COMPLETE) != 0 && (functions == NULL
     || functions->executable_funcs[0] == NULL)) {
   uint32_t excluded_options = (PCRE2_JIT_PARTIAL_SOFT | PCRE2_JIT_PARTIAL_HARD);