emacs-diffs
[Top][All Lists]
Advanced

[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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]