@@ -664,19 +664,27 @@ static PyMemberDef TopicPartition_members[] = {
664
664
665
665
666
666
static PyObject * TopicPartition_str0 (TopicPartition * self ) {
667
- PyObject * errstr = self -> error == Py_None ? NULL :
668
- cfl_PyObject_Unistr (self -> error );
667
+ PyObject * errstr = NULL ;
668
+ PyObject * errstr8 = NULL ;
669
+ const char * c_errstr = NULL ;
669
670
PyObject * ret ;
670
671
char offset_str [40 ];
672
+
671
673
snprintf (offset_str , sizeof (offset_str ), "%" PRId64 "" , self -> offset );
674
+
675
+ if (self -> error != Py_None ) {
676
+ errstr = cfl_PyObject_Unistr (self -> error );
677
+ c_errstr = cfl_PyUnistr_AsUTF8 (errstr , & errstr8 );
678
+ }
679
+
672
680
ret = cfl_PyUnistr (
673
681
_FromFormat ("TopicPartition{topic=%s,partition=%" PRId32
674
682
",offset=%s,error=%s}" ,
675
683
self -> topic , self -> partition ,
676
684
offset_str ,
677
- errstr ? cfl_PyUnistr_AsUTF8 ( errstr ) : "None" ));
678
- if ( errstr )
679
- Py_DECREF (errstr );
685
+ c_errstr ? c_errstr : "None" ));
686
+ Py_XDECREF ( errstr8 );
687
+ Py_XDECREF (errstr );
680
688
return ret ;
681
689
}
682
690
@@ -996,8 +1004,8 @@ static int populate_topic_conf (rd_kafka_topic_conf_t *tconf, const char *what,
996
1004
}
997
1005
998
1006
while (PyDict_Next (dict , & pos , & ko , & vo )) {
999
- PyObject * ks ;
1000
- PyObject * vs ;
1007
+ PyObject * ks , * ks8 ;
1008
+ PyObject * vs , * vs8 ;
1001
1009
const char * k ;
1002
1010
const char * v ;
1003
1011
char errstr [256 ];
@@ -1017,19 +1025,23 @@ static int populate_topic_conf (rd_kafka_topic_conf_t *tconf, const char *what,
1017
1025
return -1 ;
1018
1026
}
1019
1027
1020
- k = cfl_PyUnistr_AsUTF8 (ks );
1021
- v = cfl_PyUnistr_AsUTF8 (vs );
1028
+ k = cfl_PyUnistr_AsUTF8 (ks , & ks8 );
1029
+ v = cfl_PyUnistr_AsUTF8 (vs , & vs8 );
1022
1030
1023
1031
if (rd_kafka_topic_conf_set (tconf , k , v ,
1024
1032
errstr , sizeof (errstr )) !=
1025
1033
RD_KAFKA_CONF_OK ) {
1026
1034
cfl_PyErr_Format (RD_KAFKA_RESP_ERR__INVALID_ARG ,
1027
1035
"%s: %s" , what , errstr );
1036
+ Py_XDECREF (ks8 );
1037
+ Py_XDECREF (vs8 );
1028
1038
Py_DECREF (ks );
1029
1039
Py_DECREF (vs );
1030
1040
return -1 ;
1031
1041
}
1032
1042
1043
+ Py_XDECREF (ks8 );
1044
+ Py_XDECREF (vs8 );
1033
1045
Py_DECREF (ks );
1034
1046
Py_DECREF (vs );
1035
1047
}
@@ -1070,7 +1082,8 @@ static int producer_conf_set_special (Handle *self, rd_kafka_conf_t *conf,
1070
1082
if ((vs = cfl_PyObject_Unistr (valobj ))) {
1071
1083
/* Use built-in C partitioners,
1072
1084
* based on their name. */
1073
- val = cfl_PyUnistr_AsUTF8 (vs );
1085
+ PyObject * vs8 ;
1086
+ val = cfl_PyUnistr_AsUTF8 (vs , & vs8 );
1074
1087
1075
1088
if (!strcmp (val , "random" ))
1076
1089
rd_kafka_topic_conf_set_partitioner_cb (
@@ -1087,10 +1100,12 @@ static int producer_conf_set_special (Handle *self, rd_kafka_conf_t *conf,
1087
1100
"unknown builtin partitioner: %s "
1088
1101
"(available: random, consistent, consistent_random)" ,
1089
1102
val );
1103
+ Py_XDECREF (vs8 );
1090
1104
Py_DECREF (vs );
1091
1105
return -1 ;
1092
1106
}
1093
1107
1108
+ Py_XDECREF (vs8 );
1094
1109
Py_DECREF (vs );
1095
1110
1096
1111
} else {
@@ -1210,8 +1225,8 @@ rd_kafka_conf_t *common_conf_setup (rd_kafka_type_t ktype,
1210
1225
1211
1226
/* Convert kwargs dict to config key-value pairs. */
1212
1227
while (PyDict_Next (kwargs , & pos , & ko , & vo )) {
1213
- PyObject * ks ;
1214
- PyObject * vs = NULL ;
1228
+ PyObject * ks , * ks8 ;
1229
+ PyObject * vs = NULL , * vs8 = NULL ;
1215
1230
const char * k ;
1216
1231
const char * v ;
1217
1232
char errstr [256 ];
@@ -1226,15 +1241,15 @@ rd_kafka_conf_t *common_conf_setup (rd_kafka_type_t ktype,
1226
1241
return NULL ;
1227
1242
}
1228
1243
1229
- k = cfl_PyUnistr_AsUTF8 (ks );
1244
+ k = cfl_PyUnistr_AsUTF8 (ks , & ks8 );
1230
1245
if (!strcmp (k , "default.topic.config" )) {
1231
1246
if (populate_topic_conf (tconf , k , vo ) == -1 ) {
1232
1247
Py_DECREF (ks );
1233
1248
rd_kafka_topic_conf_destroy (tconf );
1234
1249
rd_kafka_conf_destroy (conf );
1235
1250
return NULL ;
1236
1251
}
1237
-
1252
+ Py_XDECREF ( ks8 );
1238
1253
Py_DECREF (ks );
1239
1254
continue ;
1240
1255
@@ -1245,6 +1260,7 @@ rd_kafka_conf_t *common_conf_setup (rd_kafka_type_t ktype,
1245
1260
"as a callable function" );
1246
1261
rd_kafka_topic_conf_destroy (tconf );
1247
1262
rd_kafka_conf_destroy (conf );
1263
+ Py_XDECREF (ks8 );
1248
1264
Py_DECREF (ks );
1249
1265
return NULL ;
1250
1266
}
@@ -1256,6 +1272,7 @@ rd_kafka_conf_t *common_conf_setup (rd_kafka_type_t ktype,
1256
1272
h -> error_cb = vo ;
1257
1273
Py_INCREF (h -> error_cb );
1258
1274
}
1275
+ Py_XDECREF (ks8 );
1259
1276
Py_DECREF (ks );
1260
1277
continue ;
1261
1278
} else if (!strcmp (k , "stats_cb" )) {
@@ -1265,6 +1282,7 @@ rd_kafka_conf_t *common_conf_setup (rd_kafka_type_t ktype,
1265
1282
"as a callable function" );
1266
1283
rd_kafka_topic_conf_destroy (tconf );
1267
1284
rd_kafka_conf_destroy (conf );
1285
+ Py_XDECREF (ks8 );
1268
1286
Py_DECREF (ks );
1269
1287
return NULL ;
1270
1288
}
@@ -1277,6 +1295,7 @@ rd_kafka_conf_t *common_conf_setup (rd_kafka_type_t ktype,
1277
1295
h -> stats_cb = vo ;
1278
1296
Py_INCREF (h -> stats_cb );
1279
1297
}
1298
+ Py_XDECREF (ks8 );
1280
1299
Py_DECREF (ks );
1281
1300
continue ;
1282
1301
}
@@ -1288,6 +1307,7 @@ rd_kafka_conf_t *common_conf_setup (rd_kafka_type_t ktype,
1288
1307
r = consumer_conf_set_special (h , conf , tconf , k , vo );
1289
1308
if (r == -1 ) {
1290
1309
/* Error */
1310
+ Py_XDECREF (ks8 );
1291
1311
Py_DECREF (ks );
1292
1312
rd_kafka_topic_conf_destroy (tconf );
1293
1313
rd_kafka_conf_destroy (conf );
@@ -1312,10 +1332,11 @@ rd_kafka_conf_t *common_conf_setup (rd_kafka_type_t ktype,
1312
1332
"unicode string" );
1313
1333
rd_kafka_topic_conf_destroy (tconf );
1314
1334
rd_kafka_conf_destroy (conf );
1335
+ Py_XDECREF (ks8 );
1315
1336
Py_DECREF (ks );
1316
1337
return NULL ;
1317
1338
}
1318
- v = cfl_PyUnistr_AsUTF8 (vs );
1339
+ v = cfl_PyUnistr_AsUTF8 (vs , & vs8 );
1319
1340
}
1320
1341
1321
1342
if (rd_kafka_conf_set (conf , k , v , errstr , sizeof (errstr )) !=
@@ -1324,12 +1345,16 @@ rd_kafka_conf_t *common_conf_setup (rd_kafka_type_t ktype,
1324
1345
"%s" , errstr );
1325
1346
rd_kafka_topic_conf_destroy (tconf );
1326
1347
rd_kafka_conf_destroy (conf );
1348
+ Py_XDECREF (vs8 );
1327
1349
Py_XDECREF (vs );
1350
+ Py_XDECREF (ks8 );
1328
1351
Py_DECREF (ks );
1329
1352
return NULL ;
1330
1353
}
1331
1354
1355
+ Py_XDECREF (vs8 );
1332
1356
Py_XDECREF (vs );
1357
+ Py_XDECREF (ks8 );
1333
1358
Py_DECREF (ks );
1334
1359
}
1335
1360
0 commit comments