[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master d283206: Fix ungetc bug when reading an encoding er
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] master d283206: Fix ungetc bug when reading an encoding error |
Date: |
Fri, 7 Jul 2017 21:10:12 -0400 (EDT) |
branch: master
commit d2832063c3c5490c931da2f395b8b56116b0192b
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>
Fix ungetc bug when reading an encoding error
* src/lread.c (readchar, read_emacs_mule_char): Fix off-by-one
error when reading an encoding error from a file, e.g., a symbol
in an .elc file whose name is "\360\220\200\360".
---
src/lread.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/src/lread.c b/src/lread.c
index 7c554ba..44eaf13 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -340,14 +340,13 @@ readchar (Lisp_Object readcharfun, bool *multibyte)
len = BYTES_BY_CHAR_HEAD (c);
while (i < len)
{
- c = (*readbyte) (-1, readcharfun);
+ buf[i++] = c = (*readbyte) (-1, readcharfun);
if (c < 0 || ! TRAILING_CODE_P (c))
{
- while (--i > 1)
+ for (i -= c < 0; 0 < --i; )
(*readbyte) (buf[i], readcharfun);
return BYTE8_TO_CHAR (buf[0]);
}
- buf[i++] = c;
}
return STRING_CHAR (buf);
}
@@ -530,14 +529,13 @@ read_emacs_mule_char (int c, int (*readbyte) (int,
Lisp_Object), Lisp_Object rea
buf[i++] = c;
while (i < len)
{
- c = (*readbyte) (-1, readcharfun);
+ buf[i++] = c = (*readbyte) (-1, readcharfun);
if (c < 0xA0)
{
- while (--i > 1)
+ for (i -= c < 0; 0 < --i; )
(*readbyte) (buf[i], readcharfun);
return BYTE8_TO_CHAR (buf[0]);
}
- buf[i++] = c;
}
if (len == 2)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master d283206: Fix ungetc bug when reading an encoding error,
Paul Eggert <=