• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "Python.h"
2 #include "../_ssl.h"
3 
4 #include "openssl/bio.h"
5 
6 /* BIO_s_mem() to PyBytes
7  */
8 static PyObject *
_PySSL_BytesFromBIO(_sslmodulestate * state,BIO * bio)9 _PySSL_BytesFromBIO(_sslmodulestate *state, BIO *bio)
10 {
11     long size;
12     char *data = NULL;
13     size = BIO_get_mem_data(bio, &data);
14     if (data == NULL || size < 0) {
15         PyErr_SetString(PyExc_ValueError, "Not a memory BIO");
16         return NULL;
17     }
18     return PyBytes_FromStringAndSize(data, size);
19 }
20 
21 /* BIO_s_mem() to PyUnicode
22  */
23 static PyObject *
_PySSL_UnicodeFromBIO(_sslmodulestate * state,BIO * bio,const char * error)24 _PySSL_UnicodeFromBIO(_sslmodulestate *state, BIO *bio, const char *error)
25 {
26     long size;
27     char *data = NULL;
28     size = BIO_get_mem_data(bio, &data);
29     if (data == NULL || size < 0) {
30         PyErr_SetString(PyExc_ValueError, "Not a memory BIO");
31         return NULL;
32     }
33     return PyUnicode_DecodeUTF8(data, size, error);
34 }
35