bpo-25404: SSLContext.load_dh_params() non-ASCII path (GH-3459)

SSLContext.load_dh_params() now supports non-ASCII path.

Signed-off-by: Christian Heimes <christian@python.org>
This commit is contained in:
Christian Heimes 2018-02-25 09:48:02 +01:00 committed by GitHub
parent 8d4d17399f
commit 6e8f395001
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 5 deletions

View File

@ -14,7 +14,7 @@ import gc
import os
import errno
import pprint
import tempfile
import shutil
import urllib2
import traceback
import weakref
@ -1000,6 +1000,10 @@ class ContextTests(unittest.TestCase):
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):

View File

@ -0,0 +1 @@
SSLContext.load_dh_params() now supports non-ASCII path.

View File

@ -2983,13 +2983,25 @@ load_dh_params(PySSLContext *self, PyObject *filepath)
{
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;
@ -2998,6 +3010,7 @@ load_dh_params(PySSLContext *self, PyObject *filepath)
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) {