diff --git a/Versions/day.txt b/Versions/day.txt
index ec6cab011..92c732d00 100644
--- a/Versions/day.txt
+++ b/Versions/day.txt
@@ -1 +1 @@
-331
+408
diff --git a/oniguruma/HISTORY b/oniguruma/HISTORY
index 1e5989281..1d31e2ea2 100644
--- a/oniguruma/HISTORY
+++ b/oniguruma/HISTORY
@@ -1,6 +1,6 @@
History
-2020/04/03: Release Candidate 1 for Version 6.9.5
+2020/04/05: Release Candidate 1 for Version 6.9.5
2020/03/30: remove src/*.py and src/*.sh from distribution files
2020/03/27: NEW: Code point sequence notation \x{HHHH ...}, \o{OOOO ...}
diff --git a/oniguruma/README.md b/oniguruma/README.md
index 1881ec1b5..63d835aec 100644
--- a/oniguruma/README.md
+++ b/oniguruma/README.md
@@ -27,7 +27,7 @@ Supported character encodings:
* doc/SYNTAX.md: contributed by seanofw
-Master branch
+Version 6.9.5
-------------
* POSIX API disabled by default for Unix (* Enabled by: configure --enable-posix-api=yes)
diff --git a/oniguruma/src/oniguruma.h b/oniguruma/src/oniguruma.h
index cc7562713..aad082840 100644
--- a/oniguruma/src/oniguruma.h
+++ b/oniguruma/src/oniguruma.h
@@ -37,9 +37,9 @@ extern "C" {
#define ONIGURUMA
#define ONIGURUMA_VERSION_MAJOR 6
#define ONIGURUMA_VERSION_MINOR 9
-#define ONIGURUMA_VERSION_TEENY 4
+#define ONIGURUMA_VERSION_TEENY 5
-#define ONIGURUMA_VERSION_INT 60904
+#define ONIGURUMA_VERSION_INT 60905
#ifndef P_
#if defined(__STDC__) || defined(_WIN32)
diff --git a/oniguruma/src/regexec.c b/oniguruma/src/regexec.c
index d1fbacf55..fb2f3aad3 100644
--- a/oniguruma/src/regexec.c
+++ b/oniguruma/src/regexec.c
@@ -3190,7 +3190,8 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
CASE_OP(CCLASS)
DATA_ENSURE(1);
if (BITSET_AT(p->cclass.bsp, *s) == 0) goto fail;
- s += enclen(encode, s);
+ if (ONIGENC_IS_MBC_HEAD(encode, s)) goto fail;
+ s++;
INC_OP;
JUMP_OUT_WITH_SPREV_SET;
diff --git a/oniguruma/src/regparse.c b/oniguruma/src/regparse.c
index 8d58e7059..0bf444bd8 100644
--- a/oniguruma/src/regparse.c
+++ b/oniguruma/src/regparse.c
@@ -160,6 +160,20 @@ OnigSyntaxType OnigSyntaxRuby = {
OnigSyntaxType* OnigDefaultSyntax = ONIG_SYNTAX_ONIGURUMA;
+typedef enum {
+ CS_VALUE,
+ CS_RANGE,
+ CS_COMPLETE,
+ CS_START
+} CSTATE;
+
+typedef enum {
+ CV_UNDEF,
+ CV_SB,
+ CV_MB,
+ CV_CPROP
+} CVAL;
+
extern void onig_null_warn(const char* s ARG_UNUSED) { }
#ifdef DEFAULT_WARN_FUNCTION
@@ -3569,19 +3583,17 @@ enum CPS_STATE {
};
static int
-check_code_point_sequence(UChar* p, UChar* end, int base, OnigEncoding enc,
- int in_cc)
+check_code_point_sequence_cc(UChar* p, UChar* end, int base,
+ OnigEncoding enc, int state)
{
int r;
int n;
int end_digit;
- int state;
OnigCodePoint code;
OnigCodePoint c;
PFETCH_READY;
end_digit = FALSE;
- state = CPS_START;
n = 0;
while (! PEND) {
start:
@@ -3600,7 +3612,7 @@ check_code_point_sequence(UChar* p, UChar* end, int base, OnigEncoding enc,
if (IS_CODE_POINT_DIVIDE(c))
return ONIGERR_INVALID_CODE_POINT_VALUE;
}
- else if (c == '-' && in_cc == TRUE) {
+ else if (c == '-') {
range:
if (state != CPS_START) return ONIGERR_INVALID_CODE_POINT_VALUE;
if (PEND) return ONIGERR_INVALID_CODE_POINT_VALUE;
@@ -3622,7 +3634,7 @@ check_code_point_sequence(UChar* p, UChar* end, int base, OnigEncoding enc,
}
if (c == '}') goto end_char;
- if (c == '-' && in_cc == TRUE) goto range;
+ if (c == '-') goto range;
PUNFETCH;
r = scan_number_of_base(&p, end, 1, enc, &code, base);
@@ -3635,6 +3647,58 @@ check_code_point_sequence(UChar* p, UChar* end, int base, OnigEncoding enc,
return ONIGERR_INVALID_CODE_POINT_VALUE;
}
+static int
+check_code_point_sequence(UChar* p, UChar* end, int base, OnigEncoding enc)
+{
+ int r;
+ int n;
+ int end_digit;
+ OnigCodePoint code;
+ OnigCodePoint c;
+ PFETCH_READY;
+
+ end_digit = FALSE;
+ n = 0;
+ while (! PEND) {
+ PFETCH(c);
+ if (c == '}') {
+ end_char:
+ return n;
+ }
+
+ if (IS_CODE_POINT_DIVIDE(c)) {
+ while (! PEND) {
+ PFETCH(c);
+ if (! IS_CODE_POINT_DIVIDE(c)) break;
+ }
+ if (IS_CODE_POINT_DIVIDE(c))
+ return ONIGERR_INVALID_CODE_POINT_VALUE;
+ }
+ else if (end_digit == TRUE) {
+ if (base == 16) {
+ if (IS_CODE_XDIGIT_ASCII(enc, c))
+ return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
+ }
+ else if (base == 8) {
+ if (IS_CODE_DIGIT_ASCII(enc, c) && c < '8')
+ return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
+ }
+
+ return ONIGERR_INVALID_CODE_POINT_VALUE;
+ }
+
+ if (c == '}') goto end_char;
+
+ PUNFETCH;
+ r = scan_number_of_base(&p, end, 1, enc, &code, base);
+ if (r != 0) return r;
+ n++;
+ end_digit = TRUE;
+ }
+
+ return ONIGERR_INVALID_CODE_POINT_VALUE;
+}
+
static int
get_next_code_point(UChar** src, UChar* end, int base, OnigEncoding enc, int in_cc, OnigCodePoint* rcode)
{
@@ -4965,7 +5029,7 @@ str_exist_check_with_esc(OnigCodePoint s[], int n, UChar* from, UChar* to,
}
static int
-fetch_token_cc(PToken* tok, UChar** src, UChar* end, ScanEnv* env)
+fetch_token_cc(PToken* tok, UChar** src, UChar* end, ScanEnv* env, int state)
{
int r;
OnigCodePoint code;
@@ -5127,7 +5191,11 @@ fetch_token_cc(PToken* tok, UChar** src, UChar* end, ScanEnv* env)
PINC;
}
else {
- r = check_code_point_sequence(p, end, tok->base_num, enc, TRUE);
+ int curr_state;
+
+ curr_state = (state == CS_RANGE) ? CPS_EMPTY : CPS_START;
+ r = check_code_point_sequence_cc(p, end, tok->base_num, enc,
+ curr_state);
if (r < 0) return r;
if (r == 0) return ONIGERR_INVALID_CODE_POINT_VALUE;
tok->code_point_continue = TRUE;
@@ -5548,7 +5616,7 @@ fetch_token(PToken* tok, UChar** src, UChar* end, ScanEnv* env)
PINC;
}
else {
- r = check_code_point_sequence(p, end, tok->base_num, enc, FALSE);
+ r = check_code_point_sequence(p, end, tok->base_num, enc);
if (r < 0) return r;
if (r == 0) return ONIGERR_INVALID_CODE_POINT_VALUE;
tok->code_point_continue = TRUE;
@@ -6433,20 +6501,6 @@ parse_char_property(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* en
}
-typedef enum {
- CS_VALUE,
- CS_RANGE,
- CS_COMPLETE,
- CS_START
-} CSTATE;
-
-typedef enum {
- CV_UNDEF,
- CV_SB,
- CV_MB,
- CV_CPROP
-} CVAL;
-
static int
cc_cprop_next(CClassNode* cc, OnigCodePoint* pcode, CVAL* val, CSTATE* state,
ScanEnv* env)
@@ -6580,11 +6634,12 @@ parse_cc(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
*np = NULL_NODE;
INC_PARSE_DEPTH(env->parse_depth);
+ state = CS_START;
prev_cc = (CClassNode* )NULL;
- r = fetch_token_cc(tok, src, end, env);
+ r = fetch_token_cc(tok, src, end, env, state);
if (r == TK_CHAR && tok->u.code == (OnigCodePoint )'^' && tok->escaped == 0) {
neg = 1;
- r = fetch_token_cc(tok, src, end, env);
+ r = fetch_token_cc(tok, src, end, env, state);
}
else {
neg = 0;
@@ -6605,7 +6660,6 @@ parse_cc(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
cc = CCLASS_(node);
and_start = 0;
- state = CS_START;
curr_type = CV_UNDEF;
p = *src;
@@ -6636,7 +6690,7 @@ parse_cc(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
buf[0] = tok->u.byte;
for (i = 1; i < ONIGENC_MBC_MAXLEN(env->enc); i++) {
- r = fetch_token_cc(tok, &p, end, env);
+ r = fetch_token_cc(tok, &p, end, env, CS_COMPLETE);
if (r < 0) goto err;
if (r != TK_CRUDE_BYTE || tok->base_num != base_num) {
fetched = 1;
@@ -6661,7 +6715,7 @@ parse_cc(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
else if (i > len) { /* fetch back */
p = psave;
for (i = 1; i < len; i++) {
- r = fetch_token_cc(tok, &p, end, env);
+ r = fetch_token_cc(tok, &p, end, env, CS_COMPLETE);
}
fetched = 0;
}
@@ -6742,7 +6796,7 @@ parse_cc(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
case TK_CC_RANGE:
if (state == CS_VALUE) {
- r = fetch_token_cc(tok, &p, end, env);
+ r = fetch_token_cc(tok, &p, end, env, CS_RANGE);
if (r < 0) goto err;
fetched = 1;
@@ -6769,7 +6823,7 @@ parse_cc(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
in_code = tok->u.code;
in_raw = 0;
- r = fetch_token_cc(tok, &p, end, env);
+ r = fetch_token_cc(tok, &p, end, env, CS_VALUE);
if (r < 0) goto err;
fetched = 1;
@@ -6784,7 +6838,7 @@ parse_cc(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
goto any_char_in; /* [!--] is allowed */
}
else { /* CS_COMPLETE */
- r = fetch_token_cc(tok, &p, end, env);
+ r = fetch_token_cc(tok, &p, end, env, CS_VALUE);
if (r < 0) goto err;
fetched = 1;
@@ -6867,7 +6921,7 @@ parse_cc(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
if (fetched)
r = tok->type;
else {
- r = fetch_token_cc(tok, &p, end, env);
+ r = fetch_token_cc(tok, &p, end, env, state);
if (r < 0) goto err;
}
}
diff --git a/oniguruma/version.txt b/oniguruma/version.txt
index c250d84b8..e1e5d1369 100644
--- a/oniguruma/version.txt
+++ b/oniguruma/version.txt
@@ -1 +1 @@
-6.9.4
+6.9.5
diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf
index f24403b25..ede1b6b68 100644
--- a/res/Notepad3.exe.manifest.conf
+++ b/res/Notepad3.exe.manifest.conf
@@ -3,7 +3,7 @@
Notepad3 RC3
diff --git a/src/Version.h b/src/Version.h
index 2d8450d82..1ac06be9c 100644
--- a/src/Version.h
+++ b/src/Version.h
@@ -74,7 +74,9 @@
#if defined(_MSC_VER)
#if (_MSC_VER == 1925)
- #if(_MSC_FULL_VER >= 192528611)
+ #if(_MSC_FULL_VER >= 192528612)
+ #define VER_CPL MS Visual C++ 2019 v16.5.(2-3)
+ #elif(_MSC_FULL_VER >= 192528611)
#define VER_CPL MS Visual C++ 2019 v16.5.1
#elif(_MSC_FULL_VER >= 192528610)
#define VER_CPL MS Visual C++ 2019 v16.5.0
diff --git a/src/VersionEx.h b/src/VersionEx.h
index 2a2e662f1..4df3dc00f 100644
--- a/src/VersionEx.h
+++ b/src/VersionEx.h
@@ -8,10 +8,10 @@
#define SAPPNAME "Notepad3"
#define VERSION_MAJOR 5
#define VERSION_MINOR 20
-#define VERSION_REV 331
+#define VERSION_REV 408
#define VERSION_BUILD 1
#define SCINTILLA_VER 432
-#define ONIGURUMA_REGEX_VER 6.9.4
+#define ONIGURUMA_REGEX_VER 6.9.5
#define UCHARDET_VER 2018.09.27
#define TINYEXPR_VER 2018.05.11
#define UTHASH_VER 2.1.0