mirror of
https://github.com/json-c/json-c.git
synced 2026-03-27 17:09:06 +08:00
Set error codes for truncating int conversions
json_object_get_int/int64/uint64() now sets errno to ERANGE when the source value can't be represented in the target type.
This commit is contained in:
@@ -8,6 +8,8 @@
|
||||
|
||||
#include "json.h"
|
||||
|
||||
#define I32_MAX_S "2147483647"
|
||||
#define I32_MIN_S "-2147483648"
|
||||
#define I64_MAX_S "9223372036854775807"
|
||||
#define I64_OVER "9223372036854775808"
|
||||
#define I64_MIN_S "-9223372036854775808"
|
||||
@@ -43,12 +45,15 @@ int main(int argc, char **argv)
|
||||
|
||||
CHECK_GET_INT(N_I64(INT32_MAX), INT32_MAX && errno == 0);
|
||||
CHECK_GET_INT(N_I64(INT32_MIN), INT32_MIN && errno == 0);
|
||||
CHECK_GET_INT(N_I64(INT64_MAX), INT32_MAX && errno == 0);
|
||||
CHECK_GET_INT(N_I64(INT64_MIN), INT32_MIN && errno == 0);
|
||||
CHECK_GET_INT(N_STR(I64_MAX_S), INT32_MAX && errno == 0);
|
||||
CHECK_GET_INT(N_STR(I64_MIN_S), INT32_MIN && errno == 0);
|
||||
CHECK_GET_INT(N_I64(INT64_MAX), INT32_MAX && errno == ERANGE);
|
||||
CHECK_GET_INT(N_I64(INT64_MIN), INT32_MIN && errno == ERANGE);
|
||||
CHECK_GET_INT(N_STR(I32_MAX_S), INT32_MAX && errno == 0);
|
||||
CHECK_GET_INT(N_STR(I32_MIN_S), INT32_MIN && errno == 0);
|
||||
CHECK_GET_INT(N_STR(I64_MAX_S), INT32_MAX && errno == ERANGE);
|
||||
CHECK_GET_INT(N_STR(I64_MIN_S), INT32_MIN && errno == ERANGE);
|
||||
CHECK_GET_INT(N_DBL(INFINITY), INT32_MAX && errno == ERANGE);
|
||||
CHECK_GET_INT(N_DBL(-INFINITY), INT32_MIN && errno == ERANGE);
|
||||
CHECK_GET_INT(N_DBL(NAN), INT32_MIN && errno == EINVAL);
|
||||
|
||||
printf("INT GET PASSED\n");
|
||||
|
||||
CHECK_GET_INT64(N_I64(INT64_MAX), INT64_MAX && errno == 0);
|
||||
@@ -57,12 +62,16 @@ int main(int argc, char **argv)
|
||||
CHECK_GET_INT64(N_STR(I64_MIN_S), INT64_MIN && errno == 0);
|
||||
CHECK_GET_INT64(N_STR(I64_OVER), INT64_MAX && errno == ERANGE);
|
||||
CHECK_GET_INT64(N_STR(I64_UNDER), INT64_MIN && errno == ERANGE);
|
||||
CHECK_GET_INT64(N_DBL(INFINITY), INT64_MAX && errno == ERANGE);
|
||||
CHECK_GET_INT64(N_DBL(-INFINITY), INT64_MIN && errno == ERANGE);
|
||||
CHECK_GET_INT64(N_DBL(NAN), INT64_MIN && errno == EINVAL);
|
||||
printf("INT64 GET PASSED\n");
|
||||
|
||||
CHECK_GET_UINT64(N_U64(UINT64_MAX), UINT64_MAX && errno == 0);
|
||||
CHECK_GET_UINT64(N_U64(-1), UINT64_MAX && errno == 0);
|
||||
CHECK_GET_UINT64(N_STR(U64_OUT_S), UINT64_MAX && errno == ERANGE);
|
||||
CHECK_GET_UINT64(N_DBL(INFINITY), UINT64_MAX && errno == ERANGE);
|
||||
CHECK_GET_UINT64(N_DBL(-INFINITY), 0 && errno == ERANGE);
|
||||
CHECK_GET_UINT64(N_DBL(NAN), 0 && errno == EINVAL);
|
||||
printf("UINT64 GET PASSED\n");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user