#define OPENSSL_NO_DEPRECATED 1
#define PY_SSIZE_T_CLEAN
-#define NEEDS_PY_IDENTIFIER
#include "Python.h"
PyObject *err_value = NULL, *reason_obj = NULL, *lib_obj = NULL;
PyObject *verify_obj = NULL, *verify_code_obj = NULL;
PyObject *init_value, *msg, *key;
- _Py_IDENTIFIER(reason);
- _Py_IDENTIFIER(library);
- _Py_IDENTIFIER(verify_message);
- _Py_IDENTIFIER(verify_code);
if (errcode != 0) {
int lib, reason;
if (reason_obj == NULL)
reason_obj = Py_None;
- if (_PyObject_SetAttrId(err_value, &PyId_reason, reason_obj))
+ if (PyObject_SetAttr(err_value, state->str_reason, reason_obj))
goto fail;
if (lib_obj == NULL)
lib_obj = Py_None;
- if (_PyObject_SetAttrId(err_value, &PyId_library, lib_obj))
+ if (PyObject_SetAttr(err_value, state->str_library, lib_obj))
goto fail;
if ((sslsock != NULL) && (type == state->PySSLCertVerificationErrorObject)) {
/* Only set verify code / message for SSLCertVerificationError */
- if (_PyObject_SetAttrId(err_value, &PyId_verify_code,
+ if (PyObject_SetAttr(err_value, state->str_verify_code,
verify_code_obj))
goto fail;
- if (_PyObject_SetAttrId(err_value, &PyId_verify_message, verify_obj))
+ if (PyObject_SetAttr(err_value, state->str_verify_message, verify_obj))
goto fail;
}
return 0;
}
+static int
+sslmodule_init_strings(PyObject *module)
+{
+ _sslmodulestate *state = get_ssl_state(module);
+ state->str_library = PyUnicode_InternFromString("library");
+ if (state->str_library == NULL) {
+ return -1;
+ }
+ state->str_reason = PyUnicode_InternFromString("reason");
+ if (state->str_reason == NULL) {
+ return -1;
+ }
+ state->str_verify_message = PyUnicode_InternFromString("verify_message");
+ if (state->str_verify_message == NULL) {
+ return -1;
+ }
+ state->str_verify_code = PyUnicode_InternFromString("verify_code");
+ if (state->str_verify_code == NULL) {
+ return -1;
+ }
+ return 0;
+}
+
static PyModuleDef_Slot sslmodule_slots[] = {
{Py_mod_exec, sslmodule_init_types},
{Py_mod_exec, sslmodule_init_exceptions},
{Py_mod_exec, sslmodule_init_errorcodes},
{Py_mod_exec, sslmodule_init_constants},
{Py_mod_exec, sslmodule_init_versioninfo},
+ {Py_mod_exec, sslmodule_init_strings},
{0, NULL}
};
Py_CLEAR(state->err_names_to_codes);
Py_CLEAR(state->lib_codes_to_names);
Py_CLEAR(state->Sock_Type);
-
+ Py_CLEAR(state->str_library);
+ Py_CLEAR(state->str_reason);
+ Py_CLEAR(state->str_verify_code);
+ Py_CLEAR(state->str_verify_message);
return 0;
}