diff options
| author | Paul Eggert | 2020-04-20 22:26:30 -0700 |
|---|---|---|
| committer | Paul Eggert | 2020-04-20 22:31:11 -0700 |
| commit | c88a3be8087ad0165415aa87c01f868a7433cb21 (patch) | |
| tree | 5bba8004c1846653aa514416d31c6b47034df740 /src/buffer.c | |
| parent | 856d9378a49ec9ec1af2ea74fb9309fe4c39cd1d (diff) | |
| download | emacs-c88a3be8087ad0165415aa87c01f868a7433cb21.tar.gz emacs-c88a3be8087ad0165415aa87c01f868a7433cb21.zip | |
Fix string-to-multibyte overlong sequence bug
* src/character.h (MULTIBYTE_LENGTH, MULTIBYTE_LENGTH_NO_CHECK):
Remove, replacing with ...
(multibyte_length): ... this new function. All callers changed.
The new function rejects overlong multibyte forms.
* test/src/buffer-tests.el (buffer-multibyte-overlong-sequences):
New test.
Diffstat (limited to 'src/buffer.c')
| -rw-r--r-- | src/buffer.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/src/buffer.c b/src/buffer.c index 5398414e6eb..53b3bd960c4 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -2634,8 +2634,7 @@ current buffer is cleared. */) | |||
| 2634 | if (ASCII_CHAR_P (*p)) | 2634 | if (ASCII_CHAR_P (*p)) |
| 2635 | p++, pos++; | 2635 | p++, pos++; |
| 2636 | else if (EQ (flag, Qt) | 2636 | else if (EQ (flag, Qt) |
| 2637 | && ! CHAR_BYTE8_HEAD_P (*p) | 2637 | && 0 < (bytes = multibyte_length (p, pend, true, false))) |
| 2638 | && (bytes = MULTIBYTE_LENGTH (p, pend)) > 0) | ||
| 2639 | p += bytes, pos += bytes; | 2638 | p += bytes, pos += bytes; |
| 2640 | else | 2639 | else |
| 2641 | { | 2640 | { |