-
-
Notifications
You must be signed in to change notification settings - Fork 30.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gh-123954: proposal for improving logic for setting SSL exceptions #128391
base: main
Are you sure you want to change the base?
Conversation
Since all strings that will be rendered in the exception are actually ASCII messages (no localization), I'm considering switching from a PyDict storage to a I haven't checked more in details though since I already want to know whether the proposal performs well. |
|
No, we're only reading from the hash table. It is cached in the module's state and we only lookup strings by integer keys or pairs of integers. |
Ok so I've converted it into I need to remember how I can cast my integer properly so that it can interpreted as a |
Great. The SSL data is indeed corrupted (see https://github.com/python/cpython/actions/runs/12609630149/job/35143368822?pr=128391)
Two errors have the exact same library and reason codes. I don't know how to fix this. It's either an OpenSSL bug or it's a generation error on our side: cc @gpshead |
I'll investigate. My first impression is that perhaps this is intentional--it's supposed to be a generic brotli error, but has two separate names for semantic reasons. |
You can see that the issue is that we are having two different codes when the macros are not specified, but if we're using the macros they seem to collide: cpython/Modules/_ssl_data_34.h Lines 2125 to 2134 in a4e773c
|
Looks like an upstream issue. (I'll file an issue and CC you.) There's two pieces of relevant code on OpenSSL's end. Here: |
I'd recommend also reviewing each commit separately due to the changes arising from logic extraction. I've also observed that we incorrectly use
ERR_GET_REASON(p)
on a custom error code. It's not really an issue because this is a no-op but I've added an assertion and removed the call for the semantics to match (we format the message using the error coming fromERR_peek_last_error()
but the exception object is initialized with another error code that can also be obtained bySSL_get_error()
or is a custom one).I haven't benchmarked the branch, I just want to share a proposal. Note that refactoring the logic could help target the operations that take longer time.
cc @tarasko @kumaraditya303 @gpshead