Making sure to keep advancing also when regex matches are zero-length.

This fixes Savannah bug #26977 -- a hang on start="^" end="$".


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5538 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
Benno Schulenberg 2016-01-09 18:41:56 +00:00
parent 1ac2c4cd4f
commit ebbb5b5d1e
3 changed files with 12 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2016-01-09 Benno Schulenberg <bensberg@justemail.net>
* src/color.c (precalc_multicolorinfo), src/winio.c (edit_draw):
Make sure to keep advancing also when matches are zero-length.
This fixes Savannah bug #26977 reported by Tigrmesh.
2016-01-07 Benno Schulenberg <bensberg@justemail.net> 2016-01-07 Benno Schulenberg <bensberg@justemail.net>
* src/global.c (assign_keyinfo): Delete two unneeded #ifdefs: if * src/global.c (assign_keyinfo): Delete two unneeded #ifdefs: if
they /could/ be false, the H and E keys would stop working. they /could/ be false, the H and E keys would stop working.

View File

@ -527,6 +527,10 @@ void precalc_multicolorinfo(void)
if (regexec(tmpcolor->end, &fileptr->data[startx], 1, if (regexec(tmpcolor->end, &fileptr->data[startx], 1,
&endmatch, (startx == 0) ? 0 : REG_NOTBOL) == 0) { &endmatch, (startx == 0) ? 0 : REG_NOTBOL) == 0) {
startx += endmatch.rm_eo; startx += endmatch.rm_eo;
/* Step ahead when both start and end are mere anchors. */
if (startmatch.rm_so == startmatch.rm_eo &&
endmatch.rm_so == endmatch.rm_eo)
startx += 1;
fileptr->multidata[tmpcolor->id] = CSTARTENDHERE; fileptr->multidata[tmpcolor->id] = CSTARTENDHERE;
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "end found on this line\n"); fprintf(stderr, "end found on this line\n");

View File

@ -2611,6 +2611,9 @@ void edit_draw(filestruct *fileptr, const char *converted, int
} }
} }
start_col = endmatch.rm_eo; start_col = endmatch.rm_eo;
/* Skip over a zero-length match. */
if (endmatch.rm_so == endmatch.rm_eo)
start_col += 1;
} else { } else {
/* There is no end on this line. But we haven't yet /* There is no end on this line. But we haven't yet
* looked for one on later lines. */ * looked for one on later lines. */