diff --git a/ChangeLog b/ChangeLog
index 5e5e237e..99e75bc6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-09-01  Eli Zaretskii  <eliz@gnu.org>
+
+	* read.c (unescape_char): Advance 'p' after copying the unescaped
+	characters.  Otherwise the backslashes are incorrectly erased from
+	the original string.
+
 2012-03-05  Paul Smith  <psmith@gnu.org>
 
 	Update copyright notices to use year ranges, as allowed by
diff --git a/read.c b/read.c
index 33bf1195..f075ef50 100644
--- a/read.c
+++ b/read.c
@@ -2242,9 +2242,9 @@ unescape_char (char *string, int c)
               /* It is, and there's >1 backslash.  Take half of them.  */
               l /= 2;
               memcpy (p, s, l);
-              p += l;
             }
           s = e;
+          p += l;
         }
 
       *(p++) = *(s++);