From 7fc299161dac95f94966434cd4c8579e055443fb Mon Sep 17 00:00:00 2001 From: Sourav Moitra Date: Wed, 1 Jan 2025 01:39:49 +0530 Subject: [PATCH] Fix lack of unit64 support Signed-off-by: Sourav Moitra --- src/ocispec/.dirstamp | 0 src/ocispec/json_common.c | 15 +++++++++++---- src/ocispec/json_common.h | 1 + tests/data/config.json | 7 ++++++- tests/test-1.c | 2 +- 5 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 src/ocispec/.dirstamp diff --git a/src/ocispec/.dirstamp b/src/ocispec/.dirstamp new file mode 100644 index 00000000..e69de29b diff --git a/src/ocispec/json_common.c b/src/ocispec/json_common.c index 83ed7a41..8093b4eb 100644 --- a/src/ocispec/json_common.c +++ b/src/ocispec/json_common.c @@ -141,10 +141,17 @@ json_double_to_uint (double d, unsigned int *converted) int json_double_to_uint64 (double d, uint64_t *converted) { - unsigned long long int ull; - ull = (unsigned long long int) d; - *converted = (uint64_t) ull; - return 0; + // Safely convert double to uint64_t by checking for potential overflows + if (d >= 9223372036854775807.0) { // Check if value is greater than or equal to 2^32 + // TODO: Better solution for converting double to uint64 + char string[20]; + sprintf(string, "%0.f", d); + *converted = strtoull(string, NULL, 10); + } else { + // Handle smaller values (less than 2^32) + *converted = (uint64_t) d; + } + return 0; } /* diff --git a/src/ocispec/json_common.h b/src/ocispec/json_common.h index 0d4179d2..790ef166 100644 --- a/src/ocispec/json_common.h +++ b/src/ocispec/json_common.h @@ -7,6 +7,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { diff --git a/tests/data/config.json b/tests/data/config.json index 33be19b9..3be40dda 100644 --- a/tests/data/config.json +++ b/tests/data/config.json @@ -51,10 +51,15 @@ }, "rlimits": [ { - "type": "RLIMIT_NOFILE", + "type": "RLIMIT_CORE", "hard": 18446744073709551615, "soft": 18446744073709551615 }, + { + "type": "RLIMIT_NOFILE", + "hard": 1024, + "soft": 1024 + }, { "type": "RLIMIT_NPROC", "hard": 1048576, diff --git a/tests/test-1.c b/tests/test-1.c index cd85ba6d..e7af632c 100644 --- a/tests/test-1.c +++ b/tests/test-1.c @@ -59,7 +59,7 @@ main () exit (6); if (strcmp (container->process->args[0], "ARGS1") && strcmp (container->process->args[0], container_gen->process->args[0])) exit (61); - if (container->process->rlimits[0]->hard == hard_limit && container_gen->process->rlimits[0]->hard == container->process->rlimits[0]->hard) + if (container->process->rlimits[0]->hard != hard_limit) exit (63); if (strcmp (container->mounts[0]->destination, "/proc") && strcmp (container->mounts[0]->destination, container_gen->mounts[0]->destination)) exit (62);