diff options
| author | Stefan Monnier | 2004-04-13 21:45:13 +0000 |
|---|---|---|
| committer | Stefan Monnier | 2004-04-13 21:45:13 +0000 |
| commit | d0abdf7e83b680da728b460b11f7bd3ea366700a (patch) | |
| tree | be207658dc1ec925f119e73012570823ed8c64ee /src | |
| parent | cb9d4a9f656c51cf15805f3746ea86a6d07c059d (diff) | |
| download | emacs-d0abdf7e83b680da728b460b11f7bd3ea366700a.tar.gz emacs-d0abdf7e83b680da728b460b11f7bd3ea366700a.zip | |
(scan_lists): Simplify backward string scan.
Fix off-by-one boundary check for string and comment fences.
Diffstat (limited to 'src')
| -rw-r--r-- | src/syntax.c | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/src/syntax.c b/src/syntax.c index 30fc94267cd..72f7a5c5209 100644 --- a/src/syntax.c +++ b/src/syntax.c | |||
| @@ -2398,8 +2398,8 @@ scan_lists (from, count, depth, sexpflag) | |||
| 2398 | case Sstring_fence: | 2398 | case Sstring_fence: |
| 2399 | while (1) | 2399 | while (1) |
| 2400 | { | 2400 | { |
| 2401 | DEC_BOTH (from, from_byte); | ||
| 2402 | if (from == stop) goto lose; | 2401 | if (from == stop) goto lose; |
| 2402 | DEC_BOTH (from, from_byte); | ||
| 2403 | UPDATE_SYNTAX_TABLE_BACKWARD (from); | 2403 | UPDATE_SYNTAX_TABLE_BACKWARD (from); |
| 2404 | if (!char_quoted (from, from_byte) | 2404 | if (!char_quoted (from, from_byte) |
| 2405 | && (c = FETCH_CHAR (from_byte), | 2405 | && (c = FETCH_CHAR (from_byte), |
| @@ -2414,19 +2414,13 @@ scan_lists (from, count, depth, sexpflag) | |||
| 2414 | while (1) | 2414 | while (1) |
| 2415 | { | 2415 | { |
| 2416 | if (from == stop) goto lose; | 2416 | if (from == stop) goto lose; |
| 2417 | temp_pos = from_byte; | 2417 | DEC_BOTH (from, from_byte); |
| 2418 | if (! NILP (current_buffer->enable_multibyte_characters)) | 2418 | UPDATE_SYNTAX_TABLE_BACKWARD (from); |
| 2419 | DEC_POS (temp_pos); | 2419 | if (!char_quoted (from, from_byte) |
| 2420 | else | 2420 | && stringterm == (c = FETCH_CHAR (from_byte)) |
| 2421 | temp_pos--; | ||
| 2422 | UPDATE_SYNTAX_TABLE_BACKWARD (from - 1); | ||
| 2423 | if (!char_quoted (from - 1, temp_pos) | ||
| 2424 | && stringterm == (c = FETCH_CHAR (temp_pos)) | ||
| 2425 | && SYNTAX_WITH_MULTIBYTE_CHECK (c) == Sstring) | 2421 | && SYNTAX_WITH_MULTIBYTE_CHECK (c) == Sstring) |
| 2426 | break; | 2422 | break; |
| 2427 | DEC_BOTH (from, from_byte); | ||
| 2428 | } | 2423 | } |
| 2429 | DEC_BOTH (from, from_byte); | ||
| 2430 | if (!depth && sexpflag) goto done2; | 2424 | if (!depth && sexpflag) goto done2; |
| 2431 | break; | 2425 | break; |
| 2432 | default: | 2426 | default: |