Filter non-ASCII input when not in binary mode
authorJeremy Stanley <fungi@yuggoth.org>
Sat, 30 Jun 2018 13:42:40 +0000 (13:42 +0000)
committerJeremy Stanley <fungi@yuggoth.org>
Sat, 30 Jun 2018 15:09:03 +0000 (15:09 +0000)
If the client does not have binary send enabled per prior Telnet
option negotiation, filter for non-ASCII characters. This fixes a
bug where previously only binary mode senders were checked for
non-ASCII input and 7-bit senders were checked for non-UTF-8 input
rather than the other way around.

mudpy/misc.py
mudpy/tests/selftest.py

index 439e00a..009de29 100644 (file)
@@ -883,8 +883,8 @@ class User:
                 line = line.strip()
 
                 # log non-printable characters remaining
-                if mudpy.telnet.is_enabled(self, mudpy.telnet.TELOPT_BINARY,
-                                           mudpy.telnet.HIM):
+                if not mudpy.telnet.is_enabled(
+                        self, mudpy.telnet.TELOPT_BINARY, mudpy.telnet.HIM):
                     asciiline = bytes([x for x in line if 32 <= x <= 126])
                     if line != asciiline:
                         logline = "Non-ASCII characters from "
index bf32434..e120e70 100644 (file)
@@ -151,9 +151,9 @@ test_admin_setup = (
 test_telnet_iac = (
     # Send a double (escaped) IAC byte within other text, which should get
     # unescaped and deduplicated to a single \xff in the buffer and then
-    # the line of input discarded as a non-UTF-8 sequence
+    # the line of input discarded as a non-ASCII sequence
     (2, "> ", b"say argle\xff\xffbargle\r\n"),
-    (2, r"Non-UTF-8 sequence from admin: b'say argle\\xffbargle'.*> ", ""),
+    (2, r"Non-ASCII characters from admin: b'say argle\\xffbargle'.*> ", ""),
 )
 
 test_telnet_unknown = (