Skip to content

Commit 468ba95

Browse files
miss-islingtonpablogsalYhg1sambvserhiy-storchaka
authored
[3.9] gh-107077: Raise SSLCertVerificationError even if the error is set via SSL_ERROR_SYSCALL (GH-107586) (#107590)
(cherry picked from commit 77e0919) Co-authored-by: Pablo Galindo Salgado <[email protected]> Co-authored-by: T. Wouters <[email protected]> Co-authored-by: Łukasz Langa <[email protected]> Co-authored-by: Serhiy Storchaka <[email protected]>
1 parent 4b68e5d commit 468ba95

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Seems that in some conditions, OpenSSL will return ``SSL_ERROR_SYSCALL``
2+
instead of ``SSL_ERROR_SSL`` when a certification verification has failed,
3+
but the error parameters will still contain ``ERR_LIB_SSL`` and
4+
``SSL_R_CERTIFICATE_VERIFY_FAILED``. We are now detecting this situation and
5+
raising the appropiate ``ssl.SSLCertVerificationError``. Patch by Pablo
6+
Galindo

Modules/_ssl.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,10 @@ PySSL_SetError(PySSLSocket *sslsock, int ret, const char *filename, int lineno)
817817
errstr = "Some I/O error occurred";
818818
}
819819
} else {
820+
if (ERR_GET_LIB(e) == ERR_LIB_SSL &&
821+
ERR_GET_REASON(e) == SSL_R_CERTIFICATE_VERIFY_FAILED) {
822+
type = PySSLCertVerificationErrorObject;
823+
}
820824
p = PY_SSL_ERROR_SYSCALL;
821825
}
822826
break;

0 commit comments

Comments
 (0)