import os
import errno
import pprint
-import tempfile
+import shutil
import urllib2
import traceback
import weakref
self.assertEqual(cm.exception.errno, errno.ENOENT)
with self.assertRaises(ssl.SSLError) as cm:
ctx.load_dh_params(CERTFILE)
+ with support.temp_dir() as d:
+ fname = os.path.join(d, u'dhpäräm.pem')
+ shutil.copy(DHFILE, fname)
+ ctx.load_dh_params(fname)
@skip_if_broken_ubuntu_ssl
def test_session_stats(self):
{
BIO *bio;
DH *dh;
- char *path = PyBytes_AsString(filepath);
- if (!path) {
- return NULL;
+ PyObject *filepath_bytes = NULL;
+
+ if (PyString_Check(filepath)) {
+ Py_INCREF(filepath);
+ filepath_bytes = filepath;
+ } else {
+ PyObject *u = PyUnicode_FromObject(filepath);
+ if (!u)
+ return NULL;
+ filepath_bytes = PyUnicode_AsEncodedString(
+ u, Py_FileSystemDefaultEncoding, NULL);
+ Py_DECREF(u);
+ if (!filepath_bytes)
+ return NULL;
}
- bio = BIO_new_file(path, "r");
+ bio = BIO_new_file(PyBytes_AS_STRING(filepath_bytes), "r");
if (bio == NULL) {
+ Py_DECREF(filepath_bytes);
ERR_clear_error();
PyErr_SetFromErrnoWithFilenameObject(PyExc_IOError, filepath);
return NULL;
PySSL_BEGIN_ALLOW_THREADS
dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
BIO_free(bio);
+ Py_DECREF(filepath_bytes);
PySSL_END_ALLOW_THREADS
if (dh == NULL) {
if (errno != 0) {