@@ -766,9 +766,10 @@ convertBinData(getdns_bindata* data,
766766 PyObject * a_string ;
767767
768768#if PY_MAJOR_VERSION >= 3
769- if ((a_string = PyUnicode_FromString ((char * )data -> data )) == NULL ) {
769+ if ((a_string = PyUnicode_FromStringAndSize ((char * )data -> data ), ( Py_ssize_t ) data -> size ) == NULL ) {
770770#else
771- if ((a_string = PyString_FromString ((char * )data -> data )) == NULL ) {
771+
772+ if ((a_string = PyString_FromStringAndSize ((char * )data -> data , (Py_ssize_t )data -> size )) == NULL ) {
772773#endif
773774 PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
774775 return NULL ;
@@ -870,9 +871,11 @@ convertToDict(struct getdns_dict* dict) {
870871 getdns_dict_get_bindata (dict , (char * )nameBin -> data , & data );
871872 PyObject * res = convertBinData (data , (char * )nameBin -> data );
872873#if PY_MAJOR_VERSION >= 3
873- PyDict_SetItem (resultsdict1 , PyUnicode_FromString ((char * ) nameBin -> data ), res );
874+ PyDict_SetItem (resultsdict1 , PyUnicode_FromStringAndSize ((char * )nameBin -> data ,
875+ (Py_ssize_t )nameBin -> size ), res );
874876#else
875- PyDict_SetItem (resultsdict1 , PyString_FromString ((char * ) nameBin -> data ), res );
877+ PyDict_SetItem (resultsdict1 , PyString_FromStringAndSize ((char * )nameBin -> data ,
878+ (Py_ssize_t )nameBin -> size ), res );
876879#endif
877880 break ;
878881 }
@@ -883,9 +886,11 @@ convertToDict(struct getdns_dict* dict) {
883886 PyObject * rl1 = Py_BuildValue ("i" , res );
884887 PyObject * res1 = Py_BuildValue ("O" , rl1 );
885888#if PY_MAJOR_VERSION >= 3
886- PyDict_SetItem (resultsdict1 , PyUnicode_FromString ((char * ) nameBin -> data ), res1 );
889+ PyDict_SetItem (resultsdict1 , PyUnicode_FromStringAndSize ((char * )nameBin -> data ,
890+ (Py_ssize_t )nameBin -> size ), res1 );
887891#else
888- PyDict_SetItem (resultsdict1 , PyString_FromString ((char * ) nameBin -> data ), res1 );
892+ PyDict_SetItem (resultsdict1 , PyString_FromStringAndSize ((char * )nameBin -> data ,
893+ (Py_ssize_t )nameBin -> size ), res1 );
889894#endif
890895 break ;
891896 }
@@ -896,9 +901,11 @@ convertToDict(struct getdns_dict* dict) {
896901 PyObject * rl1 = convertToDict (subdict );
897902 PyObject * res1 = Py_BuildValue ("O" , rl1 );
898903#if PY_MAJOR_VERSION >= 3
899- PyDict_SetItem (resultsdict1 , PyUnicode_FromString ((char * ) nameBin -> data ), res1 );
904+ PyDict_SetItem (resultsdict1 , PyUnicode_FromStringAndSize ((char * )nameBin -> data ,
905+ (Py_ssize_t )nameBin -> size ), res1 );
900906#else
901- PyDict_SetItem (resultsdict1 , PyString_FromString ((char * ) nameBin -> data ), res1 );
907+ PyDict_SetItem (resultsdict1 , PyString_FromStringAndSize ((char * )nameBin -> data ,
908+ (Py_ssize_t )nameBin -> size ), res1 );
902909#endif
903910 break ;
904911 }
@@ -909,9 +916,11 @@ convertToDict(struct getdns_dict* dict) {
909916 PyObject * rl1 = convertToList (list );
910917 PyObject * res1 = Py_BuildValue ("O" , rl1 );
911918#if PY_MAJOR_VERSION >= 3
912- PyObject * key = PyUnicode_FromString ((char * )nameBin -> data );
919+ PyObject * key = PyUnicode_FromStringAndSize ((char * )nameBin -> data ,
920+ (Py_ssize_t )nameBin -> size );
913921#else
914- PyObject * key = PyString_FromString ((char * )nameBin -> data );
922+ PyObject * key = PyString_FromStringAndSize ((char * )nameBin -> data ,
923+ (Py_ssize_t )nameBin -> size );
915924#endif
916925 PyDict_SetItem (resultsdict1 , key , res1 );
917926 break ;
@@ -1024,9 +1033,11 @@ getdns_dict_to_ip_string(getdns_dict* dict) {
10241033 return NULL ;
10251034 }
10261035#if PY_MAJOR_VERSION >= 3
1027- if (PyDict_SetItemString (addr_dict , "address_type" , PyUnicode_FromString ((char * )type -> data )) != 0 ) {
1036+ if (PyDict_SetItemString (addr_dict , "address_type" , PyUnicode_FromStringAndSize ((char * )type -> data ,
1037+ (Py_ssize_t )type -> size )) != 0 ) {
10281038#else
1029- if (PyDict_SetItemString (addr_dict , "address_type" , PyString_FromString ((char * )type -> data )) != 0 ) {
1039+ if (PyDict_SetItemString (addr_dict , "address_type" , PyString_FromStringAndSize ((char * )type -> data ,
1040+ (Py_ssize_t )type -> size )) != 0 ) {
10301041#endif
10311042 PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
10321043 return NULL ;
@@ -1048,91 +1059,4 @@ getdns_dict_to_ip_string(getdns_dict* dict) {
10481059 return NULL ;
10491060}
10501061
1051- PyObject *
1052- getFullResponse (struct getdns_dict * dict )
1053- {
1054-
1055- PyObject * resultslist ;
1056- if ((resultslist = PyDict_New ()) == NULL ) {
1057- error_exit ("Unable to allocate response list" , 0 );
1058- return NULL ;
1059- }
1060-
1061- getdns_list * names ;
1062- getdns_dict_get_names (dict , & names );
1063- size_t len = 0 , i = 0 ;
1064- getdns_list_get_length (names , & len );
1065- for (i = 0 ; i < len ; ++ i ) {
1066- getdns_bindata * nameBin ;
1067- getdns_list_get_bindata (names , i , & nameBin );
1068- getdns_data_type type ;
1069- getdns_dict_get_data_type (dict , (char * )nameBin -> data , & type );
1070- switch (type ) {
1071- case t_bindata :
1072- {
1073- getdns_bindata * data = NULL ;
1074- getdns_dict_get_bindata (dict , (char * )nameBin -> data , & data );
1075- PyObject * res = convertBinData (data , (char * )nameBin -> data );
1076- if (res ) {
1077- #if PY_MAJOR_VERSION >= 3
1078- PyDict_SetItem (resultslist , PyUnicode_FromString ((char * )nameBin -> data ), res );
1079- #else
1080- PyDict_SetItem (resultslist , PyString_FromString ((char * )nameBin -> data ), res );
1081- #endif
1082- } else {
1083- PyObject * res1 = Py_BuildValue ("s" , "empty" );
1084- #if PY_MAJOR_VERSION >= 3
1085- PyDict_SetItem (resultslist , PyUnicode_FromString ((char * )nameBin -> data ), res1 );
1086- #else
1087- PyDict_SetItem (resultslist , PyString_FromString ((char * )nameBin -> data ), res1 );
1088- #endif
1089- }
1090- break ;
1091- }
1092- case t_int :
1093- {
1094- uint32_t res = 0 ;
1095- getdns_dict_get_int (dict , (char * )nameBin -> data , & res );
1096- PyObject * res1 = Py_BuildValue ("i" , res );
1097- #if PY_MAJOR_VERSION >= 3
1098- PyDict_SetItem (resultslist , PyUnicode_FromString ((char * )nameBin -> data ), res1 );
1099- #else
1100- PyDict_SetItem (resultslist , PyString_FromString ((char * )nameBin -> data ), res1 );
1101- #endif
1102- break ;
1103- }
1104- case t_dict :
1105- {
1106- getdns_dict * subdict = NULL ;
1107- getdns_dict_get_dict (dict , (char * )nameBin -> data , & subdict );
1108- PyObject * rl1 = convertToDict (subdict );
1109- PyObject * res1 = Py_BuildValue ("O" , rl1 );
1110- #if PY_MAJOR_VERSION >= 3
1111- PyDict_SetItem (resultslist , PyUnicode_FromString ((char * )nameBin -> data ), res1 );
1112- #else
1113- PyDict_SetItem (resultslist , PyString_FromString ((char * )nameBin -> data ), res1 );
1114- #endif
1115- break ;
1116- }
1117- case t_list :
1118- {
1119- getdns_list * list = NULL ;
1120- getdns_dict_get_list (dict , (char * )nameBin -> data , & list );
1121- PyObject * rl1 = convertToList (list );
1122- #if PY_MAJOR_VERSION >= 3
1123- PyDict_SetItem (resultslist , PyUnicode_FromString ((char * )nameBin -> data ), rl1 );
1124- #else
1125- PyDict_SetItem (resultslist , PyString_FromString ((char * )nameBin -> data ), rl1 );
1126- #endif
1127- break ;
1128- }
1129- default :
1130- break ;
1131- }
1132- }
1133-
1134- getdns_list_destroy (names );
1135-
1136- return resultslist ;
1137- }
11381062
0 commit comments