@@ -2280,9 +2280,13 @@ void initialize_bin_for_strictypes(AerospikeClient *self, as_error *err,
22802280 else if (PyByteArray_Check (py_value )) {
22812281 if (self -> user_serializer_call_info .callback ) {
22822282 as_bytes * bytes ;
2283- serialize_based_on_serializer_policy (self , SERIALIZER_NONE , & bytes ,
2284- dynamic_pool , py_value , err );
2285- binop_bin -> valuep = (as_bin_value * )bytes ;
2283+ if (serialize_based_on_serializer_policy (
2284+ self , SERIALIZER_NONE , & bytes , dynamic_pool , py_value ,
2285+ err ) != AEROSPIKE_OK ) {
2286+ }
2287+ else {
2288+ binop_bin -> valuep = (as_bin_value * )bytes ;
2289+ }
22862290 }
22872291 else {
22882292 uint8_t * str = (uint8_t * )PyByteArray_AsString (py_value );
@@ -2299,9 +2303,20 @@ void initialize_bin_for_strictypes(AerospikeClient *self, as_error *err,
22992303
23002304 if (self -> user_serializer_call_info .callback ) {
23012305 as_bytes * bytes ;
2302- serialize_based_on_serializer_policy (self , SERIALIZER_NONE , & bytes ,
2303- dynamic_pool , py_value , err );
2304- binop_bin -> valuep = (as_bin_value * )bytes ;
2306+ if (serialize_based_on_serializer_policy (
2307+ self , SERIALIZER_NONE , & bytes , dynamic_pool , py_value ,
2308+ err ) != AEROSPIKE_OK ) {
2309+ // Since serialization is unsafe, we cannot use do anything with this value.
2310+ // A nil bin is created and the error is propogated.
2311+ ((as_val * )& binop_bin -> value )-> type = AS_UNKNOWN ;
2312+ binop_bin -> valuep = (as_bin_value * )& as_nil ;
2313+ as_error_update (
2314+ err , AEROSPIKE_ERR_CLIENT ,
2315+ "Unable to create bin for unknown Python native type." );
2316+ }
2317+ else {
2318+ binop_bin -> valuep = (as_bin_value * )bytes ;
2319+ }
23052320 }
23062321 else {
23072322 uint8_t * b = (uint8_t * )PyBytes_AsString (py_value );
@@ -2320,10 +2335,21 @@ void initialize_bin_for_strictypes(AerospikeClient *self, as_error *err,
23202335 }
23212336 else if (self -> user_serializer_call_info .callback ) {
23222337 as_bytes * bytes ;
2323- serialize_based_on_serializer_policy (self , SERIALIZER_NONE , & bytes ,
2324- dynamic_pool , py_value , err );
2325- ((as_val * )& binop_bin -> value )-> type = AS_UNKNOWN ;
2326- binop_bin -> valuep = (as_bin_value * )bytes ;
2338+ if (serialize_based_on_serializer_policy (self , SERIALIZER_NONE , & bytes ,
2339+ dynamic_pool , py_value ,
2340+ err ) != AEROSPIKE_OK ) {
2341+ // Since serialization is unsafe, we cannot use do anything with this value.
2342+ // A nil bin is created and the error is propogated.
2343+ ((as_val * )& binop_bin -> value )-> type = AS_UNKNOWN ;
2344+ binop_bin -> valuep = (as_bin_value * )& as_nil ;
2345+ as_error_update (
2346+ err , AEROSPIKE_ERR_CLIENT ,
2347+ "Unable to create bin for unknown Python native type." );
2348+ }
2349+ else {
2350+ ((as_val * )& binop_bin -> value )-> type = AS_UNKNOWN ;
2351+ binop_bin -> valuep = (as_bin_value * )bytes ;
2352+ }
23272353 }
23282354 else {
23292355 // Since serialization is unsafe, we cannot use do anything with this value.
0 commit comments