Trap potential exception generated by char* to bytes casts
This commit is contained in:
@ -27,16 +27,24 @@ cdef class OBIDMS_column_seq(OBIDMS_column):
|
|||||||
if strcmp(value, OBISeq_NA) == 0 :
|
if strcmp(value, OBISeq_NA) == 0 :
|
||||||
result = None
|
result = None
|
||||||
else :
|
else :
|
||||||
result = <bytes> value
|
try:
|
||||||
free(value)
|
result = <bytes> value
|
||||||
|
finally:
|
||||||
|
free(value)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
cpdef set_line(self, index_t line_nb, object value):
|
cpdef set_line(self, index_t line_nb, object value):
|
||||||
cdef bytes value_b
|
cdef bytes value_b
|
||||||
|
|
||||||
if value is None :
|
if value is None :
|
||||||
value_b = OBISeq_NA
|
value_b = OBISeq_NA
|
||||||
else :
|
elif isinstance(value, bytes) :
|
||||||
|
value_b = value
|
||||||
|
elif isinstance(value, str) :
|
||||||
value_b = str2bytes(value)
|
value_b = str2bytes(value)
|
||||||
|
else:
|
||||||
|
raise TypeError('Sequence value must be of type Bytes, Str or None')
|
||||||
|
|
||||||
if obi_column_set_obiseq_with_elt_idx_in_view(self.view.pointer, (self.pointer)[0], line_nb, 0, value_b) < 0:
|
if obi_column_set_obiseq_with_elt_idx_in_view(self.view.pointer, (self.pointer)[0], line_nb, 0, value_b) < 0:
|
||||||
raise Exception("Problem setting a value in a column")
|
raise Exception("Problem setting a value in a column")
|
||||||
|
|
||||||
@ -64,9 +72,10 @@ cdef class OBIDMS_column_multi_elts_seq(OBIDMS_column_multi_elts):
|
|||||||
if strcmp(value, OBISeq_NA) == 0 :
|
if strcmp(value, OBISeq_NA) == 0 :
|
||||||
result = None
|
result = None
|
||||||
else :
|
else :
|
||||||
result = <bytes> value
|
try:
|
||||||
# Be careful, we have to be sure that the cast copy the data in the python structure
|
result = <bytes> value
|
||||||
free(value)
|
finally:
|
||||||
|
free(value)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
@ -85,8 +94,10 @@ cdef class OBIDMS_column_multi_elts_seq(OBIDMS_column_multi_elts):
|
|||||||
if strcmp(value, OBISeq_NA) == 0 :
|
if strcmp(value, OBISeq_NA) == 0 :
|
||||||
value_in_result = None
|
value_in_result = None
|
||||||
else :
|
else :
|
||||||
value_in_result = <bytes> value
|
try:
|
||||||
free(value)
|
value_in_result = <bytes> value
|
||||||
|
finally:
|
||||||
|
free(value)
|
||||||
result[self.elements_names[i]] = value_in_result
|
result[self.elements_names[i]] = value_in_result
|
||||||
if all_NA and (value_in_result is not None) :
|
if all_NA and (value_in_result is not None) :
|
||||||
all_NA = False
|
all_NA = False
|
||||||
|
Reference in New Issue
Block a user