Skip to content

Commit

Permalink
#3044: Upgrade PCRE to 8.44
Browse files Browse the repository at this point in the history
  • Loading branch information
obiltschnig committed Apr 11, 2021
1 parent 5339115 commit bfe4213
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 26 deletions.
4 changes: 2 additions & 2 deletions Foundation/src/pcre.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE.
/* The current PCRE version information. */

#define PCRE_MAJOR 8
#define PCRE_MINOR 43
#define PCRE_MINOR 44
#define PCRE_PRERELEASE
#define PCRE_DATE 2019-02-23
#define PCRE_DATE 020-02-12

/* When an application links to a PCRE DLL in Windows, the symbols that are
imported have to be identified as such. When building PCRE, the appropriate
Expand Down
37 changes: 20 additions & 17 deletions Foundation/src/pcre_compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Copyright (c) 1997-2018 University of Cambridge
Copyright (c) 1997-2020 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
Expand Down Expand Up @@ -70,7 +70,7 @@ COMPILE_PCREx macro will already be appropriately set. */

/* Macro for setting individual bits in class bitmaps. */

#define SETBIT(a,b) a[(b)/8] |= (1 << ((b)&7))
#define SETBIT(a,b) a[(b)/8] |= (1U << ((b)&7))

/* Maximum length value to check against when making sure that the integer that
holds the compiled pattern length does not overflow. We make it a bit less than
Expand Down Expand Up @@ -131,8 +131,8 @@ overrun before it actually does run off the end of the data block. */

/* Private flags added to firstchar and reqchar. */

#define REQ_CASELESS (1 << 0) /* Indicates caselessness */
#define REQ_VARY (1 << 1) /* Reqchar followed non-literal item */
#define REQ_CASELESS (1U << 0) /* Indicates caselessness */
#define REQ_VARY (1U << 1) /* Reqchar followed non-literal item */
/* Negative values for the firstchar and reqchar flags */
#define REQ_UNSET (-2)
#define REQ_NONE (-1)
Expand Down Expand Up @@ -3301,7 +3301,7 @@ for(;;)
if ((*xclass_flags & XCL_MAP) == 0)
{
/* No bits are set for characters < 256. */
if (list[1] == 0) return TRUE;
if (list[1] == 0) return (*xclass_flags & XCL_NOT) == 0;
/* Might be an empty repeat. */
continue;
}
Expand Down Expand Up @@ -3613,7 +3613,7 @@ for(;;)
if (chr > 255) break;
class_bitset = (pcre_uint8 *)
((list_ptr == list ? code : base_end) - list_ptr[2]);
if ((class_bitset[chr >> 3] & (1 << (chr & 7))) != 0) return FALSE;
if ((class_bitset[chr >> 3] & (1U << (chr & 7))) != 0) return FALSE;
break;

#if defined SUPPORT_UTF || !defined COMPILE_PCRE8
Expand Down Expand Up @@ -7132,17 +7132,19 @@ for (;; ptr++)
int n = 0;
ptr++;
while(IS_DIGIT(*ptr))
{
n = n * 10 + *ptr++ - CHAR_0;
if (n > 255)
{
*errorcodeptr = ERR38;
goto FAILED;
}
}
if (*ptr != CHAR_RIGHT_PARENTHESIS)
{
*errorcodeptr = ERR39;
goto FAILED;
}
if (n > 255)
{
*errorcodeptr = ERR38;
goto FAILED;
}
*code++ = n;
PUT(code, 0, (int)(ptr - cd->start_pattern + 1)); /* Pattern offset */
PUT(code, LINK_SIZE, 0); /* Default length */
Expand Down Expand Up @@ -7458,7 +7460,7 @@ for (;; ptr++)
{
open_capitem *oc;
recno = GET2(slot, 0);
cd->backref_map |= (recno < 32)? (1 << recno) : 1;
cd->backref_map |= (recno < 32)? (1U << recno) : 1;
if (recno > cd->top_backref) cd->top_backref = recno;

/* Check to see if this back reference is recursive, that it, it
Expand Down Expand Up @@ -7644,8 +7646,8 @@ for (;; ptr++)
/* Can't determine a first byte now */

if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
zerofirstchar = firstchar;
zerofirstcharflags = firstcharflags;
zerofirstchar = firstchar;
zerofirstcharflags = firstcharflags;
continue;


Expand Down Expand Up @@ -8069,7 +8071,7 @@ for (;; ptr++)
item_hwm_offset = cd->hwm - cd->start_workspace;
*code++ = ((options & PCRE_CASELESS) != 0)? OP_REFI : OP_REF;
PUT2INC(code, 0, recno);
cd->backref_map |= (recno < 32)? (1 << recno) : 1;
cd->backref_map |= (recno < 32)? (1U << recno) : 1;
if (recno > cd->top_backref) cd->top_backref = recno;

/* Check to see if this back reference is recursive, that it, it
Expand Down Expand Up @@ -8682,7 +8684,7 @@ do {
op == OP_SCBRA || op == OP_SCBRAPOS)
{
int n = GET2(scode, 1+LINK_SIZE);
int new_map = bracket_map | ((n < 32)? (1 << n) : 1);
int new_map = bracket_map | ((n < 32)? (1U << n) : 1);
if (!is_anchored(scode, new_map, cd, atomcount)) return FALSE;
}

Expand All @@ -8694,6 +8696,7 @@ do {
}

/* Condition; not anchored if no second branch */

else if (op == OP_COND)
{
if (scode[GET(scode,1)] != OP_ALT) return FALSE;
Expand Down Expand Up @@ -8809,7 +8812,7 @@ do {
op == OP_SCBRA || op == OP_SCBRAPOS)
{
int n = GET2(scode, 1+LINK_SIZE);
int new_map = bracket_map | ((n < 32)? (1 << n) : 1);
int new_map = bracket_map | ((n < 32)? (1U << n) : 1);
if (!is_startline(scode, new_map, cd, atomcount, inassert)) return FALSE;
}

Expand Down
6 changes: 3 additions & 3 deletions Foundation/src/pcre_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ sure both macros are undefined; an emulation function will then be used. */
#define PACKAGE_NAME "PCRE"

/* Define to the full name and version of this package. */
#define PACKAGE_STRING "PCRE 8.43"
#define PACKAGE_STRING "PCRE 8.44"

/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "pcre"
Expand All @@ -298,7 +298,7 @@ sure both macros are undefined; an emulation function will then be used. */
#define PACKAGE_URL ""

/* Define to the version of this package. */
#define PACKAGE_VERSION "8.43"
#define PACKAGE_VERSION "8.44"

/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested
parentheses (of any kind) in a pattern. This limits the amount of system
Expand Down Expand Up @@ -400,7 +400,7 @@ sure both macros are undefined; an emulation function will then be used. */
/* #undef SUPPORT_VALGRIND */

/* Version number of package */
#define VERSION "8.43"
#define VERSION "8.44"

/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
Expand Down
8 changes: 4 additions & 4 deletions Foundation/src/pcre_jit_compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -3937,10 +3937,10 @@ static sljit_s32 character_to_int32(pcre_uchar chr)
sljit_s32 value = (sljit_s32)chr;
#if defined COMPILE_PCRE8
#define SSE2_COMPARE_TYPE_INDEX 0
return (value << 24) | (value << 16) | (value << 8) | value;
return ((unsigned int)value << 24) | ((unsigned int)value << 16) | ((unsigned int)value << 8) | (unsigned int)value;
#elif defined COMPILE_PCRE16
#define SSE2_COMPARE_TYPE_INDEX 1
return (value << 16) | value;
return ((unsigned int)value << 16) | value;
#elif defined COMPILE_PCRE32
#define SSE2_COMPARE_TYPE_INDEX 2
return value;
Expand Down Expand Up @@ -8506,7 +8506,7 @@ if (opcode == OP_ONCE)
/* We temporarily encode the needs_control_head in the lowest bit.
Note: on the target architectures of SLJIT the ((x << 1) >> 1) returns
the same value for small signed numbers (including negative numbers). */
BACKTRACK_AS(bracket_backtrack)->u.framesize = (BACKTRACK_AS(bracket_backtrack)->u.framesize << 1) | (needs_control_head ? 1 : 0);
BACKTRACK_AS(bracket_backtrack)->u.framesize = ((unsigned int)BACKTRACK_AS(bracket_backtrack)->u.framesize << 1) | (needs_control_head ? 1 : 0);
}
return cc + repeat_length;
}
Expand Down Expand Up @@ -9001,7 +9001,7 @@ if (exact > 1)
#ifdef SUPPORT_UTF
&& !common->utf
#endif
)
&& type != OP_ANYNL && type != OP_EXTUNI)
{
OP2(SLJIT_ADD, TMP1, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(exact));
add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_GREATER, TMP1, 0, STR_END, 0));
Expand Down

0 comments on commit bfe4213

Please sign in to comment.