[tor-commits] [stem/master] Disabling newline translation in our socket

atagar at torproject.org atagar at torproject.org
Sat Feb 2 18:20:49 UTC 2013


commit c2b92450016ccfbe46edec151136c8a8a9f694cb
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Jan 27 18:18:45 2013 -0800

    Disabling newline translation in our socket
    
    In python 3 the socket file object tries to be helpful by translating newline
    characters. By default '\n', '\r', and '\r\n' are all translated to '\n'. Tor
    uses '\r\n' newlines and we check for this so disabling universal newline
    translation.
    
    ======================================================================
    ERROR: test_get_pid_by_port_netstat
    ----------------------------------------------------------------------
    Traceback:
      File "/home/atagar/Desktop/stem/test/data/python3/stem/connection.py", line 321, in authenticate
        protocolinfo_response = get_protocolinfo(controller)
      File "/home/atagar/Desktop/stem/test/data/python3/stem/connection.py", line 800, in get_protocolinfo
        protocolinfo_response = _msg(controller, "PROTOCOLINFO 1")
      File "/home/atagar/Desktop/stem/test/data/python3/stem/connection.py", line 837, in _msg
        return controller.recv()
      File "/home/atagar/Desktop/stem/test/data/python3/stem/socket.py", line 114, in recv
        return recv_message(socket_file)
      File "/home/atagar/Desktop/stem/test/data/python3/stem/socket.py", line 511, in recv_message
        raise stem.ProtocolError("All lines should end with CRLF")
    stem.ProtocolError: All lines should end with CRLF
    
    During handling of the above exception, another exception occurred:
    
    Traceback:
      File "/home/atagar/Desktop/stem/test/data/python3/test/integ/util/system.py", line 245, in test_get_pid_by_port_netstat
        elif not runner.is_ptraceable():
      File "/home/atagar/Desktop/stem/test/data/python3/test/runner.py", line 413, in is_ptraceable
        tor_version = self.get_tor_version()
      File "/home/atagar/Desktop/stem/test/data/python3/test/runner.py", line 567, in get_tor_version
        control_socket = self.get_tor_socket()
      File "/home/atagar/Desktop/stem/test/data/python3/test/runner.py", line 534, in get_tor_socket
        stem.connection.authenticate(control_socket, CONTROL_PASSWORD, self.get_chroot())
      File "/home/atagar/Desktop/stem/test/data/python3/stem/connection.py", line 323, in authenticate
        raise IncorrectSocketType("unable to use the control socket")
    stem.connection.IncorrectSocketType: unable to use the control socket
---
 stem/socket.py |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/stem/socket.py b/stem/socket.py
index cad4572..f0786ab 100644
--- a/stem/socket.py
+++ b/stem/socket.py
@@ -35,6 +35,7 @@ import re
 import socket
 import threading
 
+import stem.prereq
 import stem.response
 
 from stem.util import log
@@ -181,7 +182,12 @@ class ControlSocket(object):
 
       with self._recv_lock:
         self._socket = self._make_socket()
-        self._socket_file = self._socket.makefile(mode = "rw")
+
+        if stem.prereq.is_python_3():
+          self._socket_file = self._socket.makefile(mode = "rw", newline = "")
+        else:
+          self._socket_file = self._socket.makefile(mode = "rw")
+
         self._is_alive = True
 
         # It's possible for this to have a transient failure...





More information about the tor-commits mailing list