Commit 7e5524bb authored by Benno Schulenberg's avatar Benno Schulenberg
Browse files

painting: do not let a match for 'end' overlap a match for 'start'

During precalculation and in step_two, we begin looking for an end
match only after the full start match, not merely one byte beyond
its starting point.  So do that too when searching backward for an
unpaired start match.

Also, index can never be zero here, because if the match was of length
zero, this piece of code will have been skipped by the preceding goto.
So we can always use REG_NOTBOL here.

(That goto is wrong, by the way: https://savannah.gnu.org/bugs/?50078,
but that will follow later.)
parent e8c7cf20
Showing with 5 additions and 7 deletions
+5 -7
......@@ -2481,19 +2481,17 @@ void edit_draw(filestruct *fileptr, const char *converted,
* a start match. Is there a start on that line not followed
* by an end on that line? */
while (TRUE) {
index += startmatch.rm_so;
startmatch.rm_eo -= startmatch.rm_so;
if (regexec(varnish->end, start_line->data + index +
startmatch.rm_eo, 0, NULL,
(index + startmatch.rm_eo == 0) ?
0 : REG_NOTBOL) == REG_NOMATCH)
index += startmatch.rm_eo;
if (regexec(varnish->end, start_line->data + index,
0, NULL, REG_NOTBOL) == REG_NOMATCH)
/* No end found after this start. */
break;
index++;
if (regexec(varnish->start, start_line->data + index,
1, &startmatch, REG_NOTBOL) == REG_NOMATCH)
/* No later start on this line. */
goto step_two;
if (startmatch.rm_so == startmatch.rm_eo)
index++;
}
/* Indeed, there is a start without an end on that line. */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment