mirror of
https://github.com/json-c/json-c.git
synced 2026-03-27 17:09:06 +08:00
Explicitly handle NaN values when converting to int
Json objects of type double with the value NaN could cause undefined behavior when casting double to int in `json_object_get_int`.
This commit is contained in:
@@ -693,7 +693,7 @@ JSON_EXPORT struct json_object *json_object_new_boolean(json_bool b);
|
||||
* The type is coerced to a json_bool if the passed object is not a json_bool.
|
||||
* integer and double objects will return 0 if there value is zero
|
||||
* or 1 otherwise. If the passed object is a string it will return
|
||||
* 1 if it has a non zero length.
|
||||
* 1 if it has a non zero length.
|
||||
* If any other object type is passed 0 will be returned, even non-empty
|
||||
* json_type_array and json_type_object objects.
|
||||
*
|
||||
@@ -739,9 +739,11 @@ JSON_EXPORT struct json_object *json_object_new_uint64(uint64_t i);
|
||||
/** Get the int value of a json_object
|
||||
*
|
||||
* The type is coerced to a int if the passed object is not a int.
|
||||
* double objects will return their integer conversion. Strings will be
|
||||
* parsed as an integer. If no conversion exists then 0 is returned
|
||||
* and errno is set to EINVAL. null is equivalent to 0 (no error values set)
|
||||
* double objects will return their integer conversion except for NaN values
|
||||
* which return INT32_MIN and the errno is set to EINVAL.
|
||||
* Strings will be parsed as an integer. If no conversion exists then 0 is
|
||||
* returned and errno is set to EINVAL. null is equivalent to 0 (no error values
|
||||
* set)
|
||||
*
|
||||
* Note that integers are stored internally as 64-bit values.
|
||||
* If the value of too big or too small to fit into 32-bit, INT32_MAX or
|
||||
@@ -783,8 +785,11 @@ JSON_EXPORT int json_object_int_inc(struct json_object *obj, int64_t val);
|
||||
/** Get the int value of a json_object
|
||||
*
|
||||
* The type is coerced to a int64 if the passed object is not a int64.
|
||||
* double objects will return their int64 conversion. Strings will be
|
||||
* parsed as an int64. If no conversion exists then 0 is returned.
|
||||
* double objects will return their int64 conversion except for NaN values
|
||||
* which return INT64_MIN and the errno is set to EINVAL.
|
||||
* Strings will be parsed as an int64. If no conversion exists then 0 is
|
||||
* returned and errno is set to EINVAL. null is equivalent to 0 (no error values
|
||||
* set)
|
||||
*
|
||||
* NOTE: Set errno to 0 directly before a call to this function to determine
|
||||
* whether or not conversion was successful (it does not clear the value for
|
||||
@@ -798,8 +803,11 @@ JSON_EXPORT int64_t json_object_get_int64(const struct json_object *obj);
|
||||
/** Get the uint value of a json_object
|
||||
*
|
||||
* The type is coerced to a uint64 if the passed object is not a uint64.
|
||||
* double objects will return their uint64 conversion. Strings will be
|
||||
* parsed as an uint64. If no conversion exists then 0 is returned.
|
||||
* double objects will return their uint64 conversion except for NaN values
|
||||
* which return 0 and the errno is set to EINVAL.
|
||||
* Strings will be parsed as an uint64. If no conversion exists then 0 is
|
||||
* returned and errno is set to EINVAL. null is equivalent to 0 (no error values
|
||||
* set)
|
||||
*
|
||||
* NOTE: Set errno to 0 directly before a call to this function to determine
|
||||
* whether or not conversion was successful (it does not clear the value for
|
||||
|
||||
Reference in New Issue
Block a user