@@ -1053,17 +1053,29 @@ _create_tuple_for_attribute(_sslmodulestate *state,
1053
1053
ASN1_OBJECT * name , ASN1_STRING * value )
1054
1054
{
1055
1055
Py_ssize_t buflen ;
1056
- unsigned char * valuebuf = NULL ;
1057
- PyObject * attr ;
1056
+ PyObject * pyattr ;
1057
+ PyObject * pyname = _asn1obj2py ( state , name , 0 ) ;
1058
1058
1059
- buflen = ASN1_STRING_to_UTF8 (& valuebuf , value );
1060
- if (buflen < 0 ) {
1059
+ if (pyname == NULL ) {
1061
1060
_setSSLError (state , NULL , 0 , __FILE__ , __LINE__ );
1062
1061
return NULL ;
1063
1062
}
1064
- attr = Py_BuildValue ("Ns#" , _asn1obj2py (state , name , 0 ), valuebuf , buflen );
1065
- OPENSSL_free (valuebuf );
1066
- return attr ;
1063
+
1064
+ if (ASN1_STRING_type (value ) == V_ASN1_BIT_STRING ) {
1065
+ buflen = ASN1_STRING_length (value );
1066
+ pyattr = Py_BuildValue ("Ny#" , pyname , ASN1_STRING_get0_data (value ), buflen );
1067
+ } else {
1068
+ unsigned char * valuebuf = NULL ;
1069
+ buflen = ASN1_STRING_to_UTF8 (& valuebuf , value );
1070
+ if (buflen < 0 ) {
1071
+ _setSSLError (state , NULL , 0 , __FILE__ , __LINE__ );
1072
+ Py_DECREF (pyname );
1073
+ return NULL ;
1074
+ }
1075
+ pyattr = Py_BuildValue ("Ns#" , pyname , valuebuf , buflen );
1076
+ OPENSSL_free (valuebuf );
1077
+ }
1078
+ return pyattr ;
1067
1079
}
1068
1080
1069
1081
static PyObject *
0 commit comments