@@ -284,6 +284,7 @@ as_status pyobject_to_val(as_error * err, PyObject * py_obj, as_val ** val)
284284 PyObject * py_ustr = PyUnicode_AsUTF8String (py_obj );
285285 char * str = PyString_AsString (py_ustr );
286286 * val = (as_val * ) as_string_new (str , false);
287+ Py_DECREF (py_ustr );
287288 }
288289 else if ( PyByteArray_Check (py_obj ) ) {
289290 uint8_t * b = (uint8_t * ) PyByteArray_AsString (py_obj );
@@ -356,6 +357,7 @@ as_status pyobject_to_record(as_error * err, PyObject * py_rec, PyObject * py_me
356357 PyObject * py_ustr = PyUnicode_AsUTF8String (value );
357358 char * val = PyString_AsString (py_ustr );
358359 as_record_set_strp (rec , name , val , false);
360+ Py_DECREF (py_ustr );
359361 }
360362 else if ( PyString_Check (value ) ) {
361363 char * val = PyString_AsString (value );
@@ -480,6 +482,7 @@ as_status pyobject_to_key(as_error * err, PyObject * py_keytuple, as_key * key)
480482 else if ( PyUnicode_Check (py_set ) ) {
481483 PyObject * py_ustr = PyUnicode_AsUTF8String (py_set );
482484 set = PyString_AsString (py_ustr );
485+ Py_DECREF (py_ustr );
483486 }
484487 else {
485488 return as_error_update (err , AEROSPIKE_ERR_PARAM , "set must be a string" );
@@ -503,6 +506,7 @@ as_status pyobject_to_key(as_error * err, PyObject * py_keytuple, as_key * key)
503506 PyObject * py_ustr = PyUnicode_AsUTF8String (py_key );
504507 char * k = PyString_AsString (py_ustr );
505508 as_key_init_strp (key , ns , set , k , true);
509+ Py_DECREF (py_ustr );
506510 }
507511 else if ( PyByteArray_Check (py_key ) ) {
508512 return as_error_update (err , AEROSPIKE_ERR_PARAM , "key as a byte array is not supported" );
@@ -758,28 +762,26 @@ as_status key_to_pyobject(as_error * err, const as_key * key, PyObject ** obj)
758762 as_val_t type = as_val_type (val );
759763 switch (type ) {
760764 case AS_INTEGER : {
761- as_integer * ival = as_integer_fromval (val );
762- py_key = PyInt_FromLong ((long ) as_integer_get (ival ));
763- break ;
764- }
765+ as_integer * ival = as_integer_fromval (val );
766+ py_key = PyInt_FromLong ((long ) as_integer_get (ival ));
767+ break ;
768+ }
765769 case AS_STRING : {
766770 as_string * sval = as_string_fromval (val );
767771 py_key = PyUnicode_DecodeUTF8 (as_string_get (sval ), as_string_len (sval ), NULL );
768772 break ;
769773 }
770774 case AS_BYTES : {
771- as_bytes * bval = as_bytes_fromval (val );
772- if ( bval ) {
773- uint32_t bval_size = as_bytes_size (bval );
774- uint8_t * bval_bytes = malloc (bval_size * sizeof (uint8_t ));
775- memcpy (bval_bytes , as_bytes_get (bval ), bval_size );
776- py_key = PyByteArray_FromStringAndSize ((char * ) bval_bytes , bval_size );
777- }
778- break ;
779- }
775+ as_bytes * bval = as_bytes_fromval (val );
776+ if ( bval ) {
777+ uint32_t bval_size = as_bytes_size (bval );
778+ py_key = PyByteArray_FromStringAndSize ((char * ) as_bytes_get (bval ), bval_size );
779+ }
780+ break ;
781+ }
780782 default : {
781- break ;
782- }
783+ break ;
784+ }
783785 }
784786 }
785787
0 commit comments