[tor-commits] [obfsproxy/master] Don't do networking on connections that should be closed.

asn at torproject.org asn at torproject.org
Thu May 8 16:36:54 UTC 2014


commit 2ff160c0ad9258109d8c47eca162e7cd24e0f161
Author: George Kadianakis <desnacked at riseup.net>
Date:   Thu May 8 17:22:44 2014 +0100

    Don't do networking on connections that should be closed.
---
 ChangeLog                            |    2 ++
 obfsproxy/network/extended_orport.py |    3 +++
 obfsproxy/network/network.py         |   15 +++++++++++++++
 3 files changed, 20 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 469988e..6e62a75 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,6 @@
 Changes in version 0.2.10 - UNRELEASED:
+ - Make sure that we don't try to do networking operations on a
+   connection that should be closed. Fixes #11769.
  - Only print ScrambleSuit disclaimer on startup (instead of
    printing it for every connection). Fixes #11768.
 
diff --git a/obfsproxy/network/extended_orport.py b/obfsproxy/network/extended_orport.py
index cb8ea4f..27220d4 100644
--- a/obfsproxy/network/extended_orport.py
+++ b/obfsproxy/network/extended_orport.py
@@ -121,6 +121,9 @@ class ExtORPortProtocol(network.GenericProtocol):
         """
         We got some data, process it according to our current state.
         """
+        if self.closed:
+            log.debug("%s: ExtORPort dataReceived called while closed. Ignoring.", self.name)
+            return
 
         self.buffer.write(data_rcvd)
 
diff --git a/obfsproxy/network/network.py b/obfsproxy/network/network.py
index fa4d1e6..aadbba5 100644
--- a/obfsproxy/network/network.py
+++ b/obfsproxy/network/network.py
@@ -120,6 +120,9 @@ class Circuit(Protocol):
         Circuit was just completed; that is, its endpoints are now
         connected. Do all the things we have to do now.
         """
+        if self.closed:
+            log.debug("%s: Completed circuit while closed. Ignoring.", self.name)
+            return
 
         log.debug("%s: Circuit completed." % self.name)
 
@@ -145,6 +148,10 @@ class Circuit(Protocol):
 
         Requires both downstream and upstream connections to be set.
         """
+        if self.closed:
+            log.debug("%s: Calling circuit's dataReceived while closed. Ignoring.", self.name)
+            return
+
         assert(self.downstream and self.upstream)
         assert((conn is self.downstream) or (conn is self.upstream))
 
@@ -208,6 +215,10 @@ class GenericProtocol(Protocol, object):
         """
         Write 'buf' to the underlying transport.
         """
+        if self.closed:
+            log.debug("%s: Calling write() while connection is closed. Ignoring.", self.name)
+            return
+
         log.debug("%s: Writing %d bytes." % (self.name, len(buf)))
 
         self.transport.write(buf)
@@ -291,6 +302,10 @@ class StaticDestinationProtocol(GenericProtocol):
         XXX: Can also be called with empty 'data' because of
         Circuit.setDownstreamConnection(). Document or split function.
         """
+        if self.closed:
+            log.debug("%s: dataReceived called while closed. Ignoring.", self.name)
+            return
+
         if (not self.buffer) and (not data):
             log.debug("%s: dataReceived called without a reason.", self.name)
             return



More information about the tor-commits mailing list