]> granicus.if.org Git - python/commitdiff
Finish GC code for SSLSession and increase test coverage
authorChristian Heimes <christian@python.org>
Sat, 24 Sep 2016 08:48:05 +0000 (10:48 +0200)
committerChristian Heimes <christian@python.org>
Sat, 24 Sep 2016 08:48:05 +0000 (10:48 +0200)
Lib/test/test_ssl.py
Modules/_ssl.c

index 631c8c187df35e90441b35684f68360375b01063..ad30105b0fb3b8465d4ce64cb694de87fe34583c 100644 (file)
@@ -1474,6 +1474,7 @@ class SimpleBackgroundTests(unittest.TestCase):
                             cert_reqs=ssl.CERT_NONE) as s:
             s.connect(self.server_addr)
             self.assertEqual({}, s.getpeercert())
+            self.assertFalse(s.server_side)
 
         # this should succeed because we specify the root cert
         with test_wrap_socket(socket.socket(socket.AF_INET),
@@ -1481,6 +1482,7 @@ class SimpleBackgroundTests(unittest.TestCase):
                             ca_certs=SIGNING_CA) as s:
             s.connect(self.server_addr)
             self.assertTrue(s.getpeercert())
+            self.assertFalse(s.server_side)
 
     def test_connect_fail(self):
         # This should fail because we have no verification certs. Connection
@@ -3028,6 +3030,7 @@ if _have_threads:
             host = "127.0.0.1"
             port = support.bind_port(server)
             server = context.wrap_socket(server, server_side=True)
+            self.assertTrue(server.server_side)
 
             evt = threading.Event()
             remote = None
index fc7a989a8d5dea48f4ce12a78123e244096d16d1..4755c97d9573e414eb067c67652bc9158003f0ad 100644 (file)
@@ -149,10 +149,12 @@ static int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne)
 }
 
 #ifndef OPENSSL_NO_COMP
+/* LCOV_EXCL_START */
 static int COMP_get_type(const COMP_METHOD *meth)
 {
     return meth->type;
 }
+/* LCOV_EXCL_END */
 #endif
 
 static pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
@@ -2408,8 +2410,7 @@ PySSL_get_session(PySSLSocket *self, void *closure) {
         Py_RETURN_NONE;
     }
 #endif
-
-    pysess = PyObject_New(PySSLSession, &PySSLSession_Type);
+    pysess = PyObject_GC_New(PySSLSession, &PySSLSession_Type);
     if (pysess == NULL) {
         SSL_SESSION_free(session);
         return NULL;
@@ -2419,6 +2420,7 @@ PySSL_get_session(PySSLSocket *self, void *closure) {
     pysess->ctx = self->ctx;
     Py_INCREF(pysess->ctx);
     pysess->session = session;
+    PyObject_GC_Track(pysess);
     return (PyObject *)pysess;
 }
 
@@ -4289,11 +4291,12 @@ static PyTypeObject PySSLMemoryBIO_Type = {
 static void
 PySSLSession_dealloc(PySSLSession *self)
 {
+    PyObject_GC_UnTrack(self);
     Py_XDECREF(self->ctx);
     if (self->session != NULL) {
         SSL_SESSION_free(self->session);
     }
-    PyObject_Del(self);
+    PyObject_GC_Del(self);
 }
 
 static PyObject *
@@ -4455,7 +4458,7 @@ static PyTypeObject PySSLSession_Type = {
     0,                                         /*tp_getattro*/
     0,                                         /*tp_setattro*/
     0,                                         /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT,                        /*tp_flags*/
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,   /*tp_flags*/
     0,                                         /*tp_doc*/
     (traverseproc)PySSLSession_traverse,       /*tp_traverse*/
     (inquiry)PySSLSession_clear,               /*tp_clear*/
@@ -4590,6 +4593,7 @@ _ssl_RAND_status_impl(PyObject *module)
 }
 
 #ifndef OPENSSL_NO_EGD
+/* LCOV_EXCL_START */
 /*[clinic input]
 _ssl.RAND_egd
     path: object(converter="PyUnicode_FSConverter")
@@ -4615,6 +4619,7 @@ _ssl_RAND_egd_impl(PyObject *module, PyObject *path)
     }
     return PyLong_FromLong(bytes);
 }
+/* LCOV_EXCL_STOP */
 #endif /* OPENSSL_NO_EGD */