@@ -231,20 +231,34 @@ cdef int convert_number_to_arrow_double(ArrowArrayImpl array_impl,
231231 """
232232 Converts a NUMBER value stored in the buffer to Arrow DOUBLE.
233233 """
234- cdef OracleNumber * value = & buffer .as_number
234+ cdef:
235+ OracleNumber * value = & buffer .as_number
236+ double double_value
235237 if value.is_max_negative_value:
236238 array_impl.append_double(- 1.0e126 )
237239 else :
238- array_impl.append_double(atof(value.chars[:value.num_chars]))
240+ errno.errno = 0
241+ double_value = strtod((< const char * > value.chars), NULL )
242+ if errno.errno != 0 :
243+ errors._raise_err(errors.ERR_CANNOT_CONVERT_TO_ARROW_DOUBLE,
244+ value = value.chars[:value.num_chars].decode())
245+ array_impl.append_double(double_value)
239246
240247
241248cdef int convert_number_to_arrow_int64(ArrowArrayImpl array_impl,
242249 OracleDataBuffer * buffer ) except - 1 :
243250 """
244251 Converts a NUMBER value stored in the buffer to Arrow INT64.
245252 """
246- cdef OracleNumber * value = & buffer .as_number
247- array_impl.append_int64(atoi(value.chars[:value.num_chars]))
253+ cdef:
254+ OracleNumber * value = & buffer .as_number
255+ int64_t int64_value
256+ errno.errno = 0
257+ int64_value = strtoll((< const char * > value.chars), NULL , 0 )
258+ if errno.errno != 0 :
259+ errors._raise_err(errors.ERR_CANNOT_CONVERT_TO_ARROW_INTEGER,
260+ value = value.chars[:value.num_chars].decode())
261+ array_impl.append_int64(int64_value)
248262
249263
250264cdef object convert_number_to_python_decimal(OracleDataBuffer * buffer ):
0 commit comments