commit 3d5e463cb108e31b9c575cbfbe1917a92ef5c0f7 Author: Zack Weinberg zackw@panix.com Date: Wed Jul 27 10:51:13 2011 -0700
Fix some copy-and-paste errors in network.c and some resource-reuse errors in tester.py.in --- src/network.c | 11 ++++++++--- src/test/tester.py.in | 45 ++++++++++++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 18 deletions(-)
diff --git a/src/network.c b/src/network.c index f7a94d3..f05c5b8 100644 --- a/src/network.c +++ b/src/network.c @@ -409,8 +409,8 @@ conn_free(conn_t *conn) socks_state_free(conn->socks_state); if (conn->upstream) bufferevent_free(conn->upstream); - if (conn->upstream) - bufferevent_free(conn->upstream); + if (conn->downstream) + bufferevent_free(conn->downstream);
memset(conn, 0x99, sizeof(conn_t)); free(conn); @@ -611,6 +611,11 @@ error_cb(struct bufferevent *bev, short what, void *arg) obfs_assert(what & (BEV_EVENT_EOF|BEV_EVENT_ERROR|BEV_EVENT_TIMEOUT)); obfs_assert(!(what & BEV_EVENT_CONNECTED));
+ /* If we get EAGAIN or EINPROGRESS here, something has gone horribly + wrong. */ + obfs_assert(EVUTIL_SOCKET_ERROR() != EAGAIN && + EVUTIL_SOCKET_ERROR() != EINPROGRESS); + log_warn("Got error: %s", evutil_socket_error_to_string(EVUTIL_SOCKET_ERROR())); error_or_eof(arg, bev); @@ -731,7 +736,7 @@ pending_socks_cb(struct bufferevent *bev, short what, void *arg) downstream_read_cb, NULL, error_cb, conn); bufferevent_enable(conn->upstream, EV_READ|EV_WRITE); if (evbuffer_get_length(bufferevent_get_input(conn->upstream)) != 0) - downstream_read_cb(bev, conn->upstream); + upstream_read_cb(conn->upstream, conn); return; }
diff --git a/src/test/tester.py.in b/src/test/tester.py.in index b0602ed..104026c 100644 --- a/src/test/tester.py.in +++ b/src/test/tester.py.in @@ -147,9 +147,6 @@ class SocksTest(object): stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- self.input_chan = connect_with_retry(("127.0.0.1", ENTRY_PORT)) - self.input_chan.settimeout(1.0) - def tearDown(self): if self.obfs_server.returncode is None: self.obfs_server.terminate() @@ -193,14 +190,17 @@ class SocksTest(object): def socksTest(self, sequence): sending = True good = True + input_chan = connect_with_retry(("127.0.0.1", ENTRY_PORT)) + input_chan.settimeout(1.0) + for msg in sequence: if msg is False: - self.input_chan.shutdown(socket.SHUT_WR) + input_chan.shutdown(socket.SHUT_WR) # Expect either a clean closedown or a connection reset # at this point. got = "" try: - got = self.input_chan.recv(4096) + got = input_chan.recv(4096) except socket.error, e: if e.errno != errno.ECONNRESET: raise self.assertEqual(got, "") @@ -213,33 +213,36 @@ class SocksTest(object): else: raise TypeError("incomprehensible msg: " + repr(msg)) if sending: - self.input_chan.sendall(exp) + input_chan.sendall(exp) else: got = "" try: - got = self.input_chan.recv(4096) + got = input_chan.recv(4096) except socket.error, e: if e.errno != errno.ECONNRESET: raise self.assertEqual(got, exp) if good: - self.input_chan.sendall(TEST_FILE) - self.input_chan.shutdown(socket.SHUT_WR) + input_chan.sendall(TEST_FILE) + input_chan.shutdown(socket.SHUT_WR) try: output = self.output_reader.get() except Queue.Empty: output = "" - self.assertEqual(output, TEST_FILE)
- self.input_chan.close() + input_chan.close() self.checkSubprocesses()
+ if good: + self.assertEqual(output, TEST_FILE) + + def test_illformed(self): # ill-formed socks message - server should drop connection self.socksTest([ "GET / HTTP/1.1\r\nHost: 127.0.0.1\r\n" "Connection: close\r\n\r\n", False ])
- def test_socks4_unsupported_methods(self): + def test_socks4_unsupported_method_1(self): # SOCKS4 bind request - should fail, presently just drops connection self.socksTest([ ( (4, 2, SERVER_PORT, 127, 0, 0, 1, 0), "!BBH5B" ), False ]) @@ -249,23 +252,35 @@ class SocksTest(object): self.socksTest([ ( (4, 1, SERVER_PORT, 127, 0, 0, 1, 0), "!BBH5B" ), ( (0, 90, SERVER_PORT, 127, 0, 0, 1), "!BBH4B" ) ])
- def test_socks5_bad_handshakes(self): + def test_socks5_bad_handshake_1(self): self.socksTest([ "\x05", False ]) + + def test_socks5_bad_handshake_2(self): self.socksTest([ "\x05\x00", False ]) + + def test_socks5_bad_handshake_3(self): self.socksTest([ "\x05\x01\x01", "\x05\xFF", False ]) + + def test_socks5_bad_handshake_4(self): self.socksTest([ "\x05\x01\x080", "\x05\xFF", False ]) + + def test_socks5_bad_handshake_5(self): self.socksTest([ "\x05\x02\x01\x02", "\x05\xFF", False ])
- def test_socks5_bad_requests(self): + def test_socks5_bad_request_1(self): self.socksTest([ "\x05\x01\x00", "\x05\x00", "\x05\x00", "\x05\x07\x00", False ]) + + def test_socks5_bad_request_2(self): self.socksTest([ "\x05\x02\x00\x01", "\x05\x00", "\x05\x00", "\x05\x07\x00", False ])
- def test_socks5_unsupported_methods(self): + def test_socks5_unsupported_method_1(self): self.socksTest([ "\x05\x01\x00", "\x05\x00", ( (5, 2, 0, 1, 127, 0, 0, 1, SERVER_PORT), "!8BH" ), "\x05\x07\x00", False ]) + + def test_socks5_unsupported_method_2(self): self.socksTest([ "\x05\x01\x00", "\x05\x00", ( (5, 3, 0, 1, 127, 0, 0, 1, SERVER_PORT), "!8BH" ), "\x05\x07\x00", False ])
tor-commits@lists.torproject.org