mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-27 08:43:40 -07:00
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.
This commit is contained in:
parent
856d9378a4
commit
c88a3be808
5 changed files with 99 additions and 66 deletions
14
src/coding.c
14
src/coding.c
|
|
@ -7670,15 +7670,17 @@ consume_chars (struct coding_system *coding, Lisp_Object translation_table,
|
|||
|
||||
if (! multibytep)
|
||||
{
|
||||
int bytes;
|
||||
|
||||
if (coding->encoder == encode_coding_raw_text
|
||||
|| coding->encoder == encode_coding_ccl)
|
||||
c = *src++, pos++;
|
||||
else if ((bytes = MULTIBYTE_LENGTH (src, src_end)) > 0)
|
||||
c = STRING_CHAR_ADVANCE_NO_UNIFY (src), pos += bytes;
|
||||
else
|
||||
c = BYTE8_TO_CHAR (*src), src++, pos++;
|
||||
{
|
||||
int bytes = multibyte_length (src, src_end, true, true);
|
||||
if (0 < bytes)
|
||||
c = STRING_CHAR_ADVANCE_NO_UNIFY (src), pos += bytes;
|
||||
else
|
||||
c = BYTE8_TO_CHAR (*src), src++, pos++;
|
||||
}
|
||||
}
|
||||
else
|
||||
c = STRING_CHAR_ADVANCE_NO_UNIFY (src), pos++;
|
||||
|
|
@ -7727,7 +7729,7 @@ consume_chars (struct coding_system *coding, Lisp_Object translation_table,
|
|||
for (i = 1; i < to_nchars; i++)
|
||||
*buf++ = XFIXNUM (AREF (trans, i));
|
||||
for (i = 1; i < from_nchars; i++, pos++)
|
||||
src += MULTIBYTE_LENGTH_NO_CHECK (src);
|
||||
src += multibyte_length (src, NULL, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue