Skip to content

Commit

Permalink
[gh 17847] avoid overflow on delta in study_chunk
Browse files Browse the repository at this point in the history
delta and pos_delta may hold OPTIMIZE_INFTY to represent infinity.
  • Loading branch information
hvds authored and khwilliamson committed May 31, 2021
1 parent 756cf5b commit e096e50
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions regcomp.c
Expand Up @@ -5386,13 +5386,25 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
}
min += charlen - min_subtract;
assert (min >= 0);
delta += min_subtract;
if ((SSize_t)min_subtract < OPTIMIZE_INFTY
&& delta < OPTIMIZE_INFTY - (SSize_t)min_subtract
) {
delta += min_subtract;
} else {
delta = OPTIMIZE_INFTY;
}
if (flags & SCF_DO_SUBSTR) {
data->pos_min += charlen - min_subtract;
if (data->pos_min < 0) {
data->pos_min = 0;
}
data->pos_delta += min_subtract;
if ((SSize_t)min_subtract < OPTIMIZE_INFTY
&& data->pos_delta < OPTIMIZE_INFTY - (SSize_t)min_subtract
) {
data->pos_delta += min_subtract;
} else {
data->pos_delta = OPTIMIZE_INFTY;
}
if (min_subtract) {
data->cur_is_floating = 1; /* float */
}
Expand Down

0 comments on commit e096e50

Please sign in to comment.