Opened 11 years ago

Last modified 10 years ago

#209 closed defect

foolscap assumesinput from stdin will not be unicode — at Initial Version

Reported by: zancas Owned by:
Priority: major Milestone: 0.6.5
Component: appserver Version: 0.6.4
Keywords: Cc:

Description

I've registered an application with a flappserver with the --accept-stdin flag. I then invoked the application with unicode type arguments. The flappserver behaves in a difficult to understand manner.

I've traced the data that I input (the unicode) as far as the

appserver.services.Command.remote_feed_stdin

method at which point it was still passing the data around. At some point subsequent to that the data was converted to .

This patch zooko wrote should make the client much pickier about the data types it can receive.

diff --git a/foolscap/appserver/client.py b/foolscap/appserver/client.py
index 44e6671..18ed0da 100644
--- a/foolscap/appserver/client.py
+++ b/foolscap/appserver/client.py
@@ -103,6 +103,8 @@ class RunCommand(Referenceable, Protocol):
         return self.d
 
     def dataReceived(self, data):
+        if not isinstance(data, str):
+            usage.error('stdin can accept only strings of bytes, not "%s"' % (type(data),))
         # this is from stdin. It shouldn't be called until after _started
         # sets up stdio and self.stdin_writer
         self.stdin_writer.callRemoteOnly("feed_stdin", data)
diff --git a/foolscap/appserver/services.py b/foolscap/appserver/services.py
index f75248e..749ef70 100644
--- a/foolscap/appserver/services.py
+++ b/foolscap/appserver/services.py
@@ -235,6 +235,8 @@ class Command(Referenceable):
         self.log_stdin = log_stdin
         self.closed = False
     def remote_feed_stdin(self, data):
+        if not isinstance(data, str):
+            usage.error('stdin can accept only strings of bytes, not "%s"' % (type(data),))
         if self.log_stdin:
             log.msg("stdin: %r" % data)
         self.process.write(data)

Change History (0)

Note: See TracTickets for help on using tickets.