Skip to content

Commit a52315e

Browse files
Fixed issue with serializer failing in initiailze_bin_for_strictypes
1 parent 0c4b0a1 commit a52315e

File tree

1 file changed

+36
-10
lines changed

1 file changed

+36
-10
lines changed

src/main/conversions.c

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)