Mend bug introduced in previous patch. Fixes crash detected by ClusterFuzz

17101.
This commit is contained in:
Philip.Hazel 2019-09-10 13:22:08 +00:00
parent bf15267c30
commit 78fae97f6c
2 changed files with 16 additions and 9 deletions

View File

@ -5594,10 +5594,18 @@ for (;; pptr++)
if (UCD_CASESET(c) == 0)
#endif
{
uint32_t d = TABLE_GET(c, cb->fcc, c);
uint32_t d;
#ifdef SUPPORT_UNICODE
if (utf && c > 127) d = UCD_OTHERCASE(c);
if (utf && c > 127) d = UCD_OTHERCASE(c); else
#endif
{
#if PCRE2_CODE_UNIT_WIDTH != 8
if (c > 255) d = c; else
#endif
d = TABLE_GET(c, cb->fcc, c);
}
if (c != d && pptr[2] == d)
{
pptr += 3; /* Move on to class end */

View File

@ -205,19 +205,19 @@ whether its argument, which is assumed to be one code unit, is less than 256.
The CHMAX_255 macro does not assume one code unit. The maximum length of a MARK
name must fit in one code unit; currently it is set to 255 or 65535. The
TABLE_GET macro is used to access elements of tables containing exactly 256
items. When code points can be greater than 255, a check is needed before
accessing these tables. */
items. Its argument is a code unit. When code points can be greater than 255, a
check is needed before accessing these tables. */
#if PCRE2_CODE_UNIT_WIDTH == 8
#define MAX_255(c) TRUE
#define MAX_MARK ((1u << 8) - 1)
#define TABLE_GET(c, table, default) ((table)[c])
#ifdef SUPPORT_UNICODE
#define SUPPORT_WIDE_CHARS
#define CHMAX_255(c) ((c) <= 255u)
#else
#define CHMAX_255(c) TRUE
#endif /* SUPPORT_UNICODE */
#define TABLE_GET(c, table, default) ((table)[c])
#else /* Code units are 16 or 32 bits */
#define CHMAX_255(c) ((c) <= 255u)
@ -228,7 +228,6 @@ accessing these tables. */
#endif
/* ----------------- Character-handling macros ----------------- */
/* There is a proposed future special "UTF-21" mode, in which only the lowest