diff --git a/ChangeLog b/ChangeLog
index dc46d976287692e7fca8c0fefc7b42c798899279..7d4e5688745b60fffac3c1f2b2eba99f26e5d2c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@
 	continuing after a discard.  This fixes Savannah bug #47104.
 	* src/files.c (get_full_path): Plug a sneaky memory leak.  This fixes
 	Savannah bug #47003 reported and solved by Mike Frysinger.
+	* src/rcfile.c (parse_binding): Allow only control sequences in the
+	proper range to be rebound.  This fixes Savannah bug #47025.
 
 2016-02-09  Benno Schulenberg  <bensberg@justemail.net>
 	* src/files.c (stat_with_alloc, open_buffer, write_file): Check the
diff --git a/src/rcfile.c b/src/rcfile.c
index 05bf90abb5e0d6fe67386e4121dc7738211fafe2..785cd901177cabe843f179e215b5344cb885bd6d 100644
--- a/src/rcfile.c
+++ b/src/rcfile.c
@@ -452,6 +452,9 @@ void parse_binding(char *ptr, bool dobind)
     else if (keycopy[0] != '^' && keycopy[0] != 'M' && keycopy[0] != 'F') {
 	rcfile_error(N_("Key name must begin with \"^\", \"M\", or \"F\""));
 	goto free_copy;
+    } else if (keycopy[0] == '^' && (keycopy[1] < 64 || keycopy[1] > 127)) {
+	rcfile_error(N_("Key name %s is invalid"), keycopy);
+	goto free_copy;
     }
 
     if (dobind) {