Skip to content

Commit 4588712

Browse 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 <[email protected]>
1 parent f576d31 commit 4588712

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed
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

+10
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)