Skip to content

Commit bee52f3

Browse files
committed
Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0: NEWS Patch from the upstream git kkos/oniguruma#60 (CVE-2017-9228) Patch from the upstream git kkos/oniguruma#59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git kkos/oniguruma#58 (CVE-2017-9227) Patch from the upstream git kkos/oniguruma#57 (CVE-2017-9224) Patch from the upstream git kkos/oniguruma#55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6
2 parents d6922ef + 46bb35a commit bee52f3

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

ext/mbstring/oniguruma/regexec.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,14 +1425,9 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
14251425
break;
14261426

14271427
case OP_EXACT1: MOP_IN(OP_EXACT1);
1428-
#if 0
14291428
DATA_ENSURE(1);
14301429
if (*p != *s) goto fail;
14311430
p++; s++;
1432-
#endif
1433-
if (*p != *s++) goto fail;
1434-
DATA_ENSURE(0);
1435-
p++;
14361431
MOP_OUT;
14371432
break;
14381433

@@ -3128,6 +3123,8 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
31283123
}
31293124
else {
31303125
UChar *q = p + reg->dmin;
3126+
3127+
if (q >= end) return 0; /* fail */
31313128
while (p < q) p += enclen(reg->enc, p);
31323129
}
31333130
}
@@ -3208,7 +3205,13 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
32083205
else {
32093206
if (reg->dmax != ONIG_INFINITE_DISTANCE) {
32103207
*low = p - reg->dmax;
3211-
if (*low > s) {
3208+
if (p - str < reg->dmax) {
3209+
*low = (UChar* )str;
3210+
if (low_prev)
3211+
*low_prev = onigenc_get_prev_char_head(reg->enc, str, *low);
3212+
}
3213+
else {
3214+
if (*low > s) {
32123215
*low = onigenc_get_right_adjust_char_head_with_prev(reg->enc, s,
32133216
*low, (const UChar** )low_prev);
32143217
if (low_prev && IS_NULL(*low_prev))
@@ -3221,6 +3224,7 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
32213224
(pprev ? pprev : str), *low);
32223225
}
32233226
}
3227+
}
32243228
}
32253229
/* no needs to adjust *high, *high is used as range check only */
32263230
*high = p - reg->dmin;

ext/mbstring/oniguruma/regparse.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3064,7 +3064,7 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
30643064
PUNFETCH;
30653065
prev = p;
30663066
num = scan_unsigned_octal_number(&p, end, 3, enc);
3067-
if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
3067+
if (num < 0 || num >= 256) return ONIGERR_TOO_BIG_NUMBER;
30683068
if (p == prev) { /* can't read nothing. */
30693069
num = 0; /* but, it's not error */
30703070
}
@@ -3436,7 +3436,7 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
34363436
if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) {
34373437
prev = p;
34383438
num = scan_unsigned_octal_number(&p, end, (c == '0' ? 2:3), enc);
3439-
if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
3439+
if (num < 0 || num >= 256) return ONIGERR_TOO_BIG_NUMBER;
34403440
if (p == prev) { /* can't read nothing. */
34413441
num = 0; /* but, it's not error */
34423442
}
@@ -4068,7 +4068,9 @@ next_state_class(CClassNode* cc, OnigCodePoint* vs, enum CCVALTYPE* type,
40684068
}
40694069
}
40704070

4071-
*state = CCS_VALUE;
4071+
if (*state != CCS_START)
4072+
*state = CCS_VALUE;
4073+
40724074
*type = CCV_CLASS;
40734075
return 0;
40744076
}
@@ -4084,7 +4086,11 @@ next_state_val(CClassNode* cc, OnigCodePoint *vs, OnigCodePoint v,
40844086
switch (*state) {
40854087
case CCS_VALUE:
40864088
if (*type == CCV_SB)
4089+
{
4090+
if (*vs > 0xff)
4091+
return ONIGERR_INVALID_CODE_POINT_VALUE;
40874092
BITSET_SET_BIT(cc->bs, (int )(*vs));
4093+
}
40884094
else if (*type == CCV_CODE_POINT) {
40894095
r = add_code_range(&(cc->mbuf), env, *vs, *vs);
40904096
if (r < 0) return r;

0 commit comments

Comments
 (0)