Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 4588712

Browse filesBrowse files
vstinnerencukou
andauthored
[3.11] gh-127257: ssl: Raise OSError for ERR_LIB_SYS (GH-127361) (GH-127905) (GH-131970)
gh-127257: ssl: Raise OSError for ERR_LIB_SYS (GH-127361) From the ERR_raise manpage: ERR_LIB_SYS This "library code" indicates that a system error is being reported. In this case, the reason code given to `ERR_raise()` and `ERR_raise_data()` *must* be `errno(3)`. This PR only handles ERR_LIB_SYS for the high-lever error types SSL_ERROR_SYSCALL and SSL_ERROR_SSL, i.e., not the ones where OpenSSL indicates it has some more information about the issue. (cherry picked from commit f4b31ed) (cherry picked from commit 7f707fa) Co-authored-by: Petr Viktorin <encukou@gmail.com>
1 parent f576d31 commit 4588712
Copy full SHA for 4588712

File tree

2 files changed

+12
-0
lines changed
Filter options

2 files changed

+12
-0
lines changed
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
In :mod:`ssl`, system call failures that OpenSSL reports using
2+
``ERR_LIB_SYS`` are now raised as :exc:`OSError`.

‎Modules/_ssl.c

Copy file name to clipboardExpand all lines: Modules/_ssl.c
+10Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,11 @@ PySSL_SetError(PySSLSocket *sslsock, int ret, const char *filename, int lineno)
654654
ERR_GET_REASON(e) == SSL_R_CERTIFICATE_VERIFY_FAILED) {
655655
type = state->PySSLCertVerificationErrorObject;
656656
}
657+
if (ERR_GET_LIB(e) == ERR_LIB_SYS) {
658+
// A system error is being reported; reason is set to errno
659+
errno = ERR_GET_REASON(e);
660+
return PyErr_SetFromErrno(PyExc_OSError);
661+
}
657662
p = PY_SSL_ERROR_SYSCALL;
658663
}
659664
break;
@@ -679,6 +684,11 @@ PySSL_SetError(PySSLSocket *sslsock, int ret, const char *filename, int lineno)
679684
errstr = "EOF occurred in violation of protocol";
680685
}
681686
#endif
687+
if (ERR_GET_LIB(e) == ERR_LIB_SYS) {
688+
// A system error is being reported; reason is set to errno
689+
errno = ERR_GET_REASON(e);
690+
return PyErr_SetFromErrno(PyExc_OSError);
691+
}
682692
break;
683693
}
684694
default:

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.