From 16a3c85baa350714742e83e6aea1d05766c8d1d9 Mon Sep 17 00:00:00 2001 From: Philip Nelson Date: Fri, 14 Jun 2024 18:15:31 -0700 Subject: [PATCH] Fix buffer push uint max --- src/core/buffer.c | 6 +++--- src/core/capi.c | 4 ++-- src/include/janet.h | 1 + test/suite-buffer.janet | 12 ++++++------ 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/core/buffer.c b/src/core/buffer.c index a34f29fb..08d3da0a 100644 --- a/src/core/buffer.c +++ b/src/core/buffer.c @@ -375,7 +375,7 @@ JANET_CORE_FN(cfun_buffer_push_uint16, uint16_t data; uint8_t bytes[2]; } u; - u.data = (uint16_t) janet_getinteger(argv, 2); + u.data = (uint16_t) janet_getuinteger(argv, 2); if (reverse) { uint8_t temp = u.bytes[1]; u.bytes[1] = u.bytes[0]; @@ -396,7 +396,7 @@ JANET_CORE_FN(cfun_buffer_push_uint32, uint32_t data; uint8_t bytes[4]; } u; - u.data = (uint32_t) janet_getinteger(argv, 2); + u.data = janet_getuinteger(argv, 2); if (reverse) reverse_u32(u.bytes); janet_buffer_push_u32(buffer, *(uint32_t *) u.bytes); @@ -414,7 +414,7 @@ JANET_CORE_FN(cfun_buffer_push_uint64, uint64_t data; uint8_t bytes[8]; } u; - u.data = (uint64_t) janet_getuinteger64(argv, 2); + u.data = janet_getuinteger64(argv, 2); if (reverse) reverse_u64(u.bytes); janet_buffer_push_u64(buffer, *(uint64_t *) u.bytes); diff --git a/src/core/capi.c b/src/core/capi.c index 166f2c5e..b3f90b4f 100644 --- a/src/core/capi.c +++ b/src/core/capi.c @@ -303,9 +303,9 @@ int32_t janet_getinteger(const Janet *argv, int32_t n) { uint32_t janet_getuinteger(const Janet *argv, int32_t n) { Janet x = argv[n]; if (!janet_checkuint(x)) { - janet_panicf("bad slot #%d, expected 32 bit signed integer, got %v", n, x); + janet_panicf("bad slot #%d, expected 32 bit unsigned integer, got %v", n, x); } - return janet_unwrap_integer(x); + return (uint32_t) janet_unwrap_number(x); } int64_t janet_getinteger64(const Janet *argv, int32_t n) { diff --git a/src/include/janet.h b/src/include/janet.h index 49430e55..d894c915 100644 --- a/src/include/janet.h +++ b/src/include/janet.h @@ -2021,6 +2021,7 @@ JANET_API void *janet_getpointer(const Janet *argv, int32_t n); JANET_API int32_t janet_getnat(const Janet *argv, int32_t n); JANET_API int32_t janet_getinteger(const Janet *argv, int32_t n); JANET_API int64_t janet_getinteger64(const Janet *argv, int32_t n); +JANET_API uint32_t janet_getuinteger(const Janet *argv, int32_t n); JANET_API uint64_t janet_getuinteger64(const Janet *argv, int32_t n); JANET_API size_t janet_getsize(const Janet *argv, int32_t n); JANET_API JanetView janet_getindexed(const Janet *argv, int32_t n); diff --git a/test/suite-buffer.janet b/test/suite-buffer.janet index b6ceecec..28fb83d5 100644 --- a/test/suite-buffer.janet +++ b/test/suite-buffer.janet @@ -85,9 +85,9 @@ (buffer/push-uint16 buffer-uint16-le :le 0x0102) (assert (= "\x02\x01" (string buffer-uint16-le)) "buffer/push-uint16 little endian") -(def buffer-uint16-negative @"") -(buffer/push-uint16 buffer-uint16-negative :be -1) -(assert (= "\xff\xff" (string buffer-uint16-negative)) "buffer/push-uint16 negative") +(def buffer-uint16-max @"") +(buffer/push-uint16 buffer-uint16-max :be 0xFFFF) +(assert (= "\xff\xff" (string buffer-uint16-max)) "buffer/push-uint16 max") (def buffer-uint32-be @"") (buffer/push-uint32 buffer-uint32-be :be 0x01020304) @@ -97,9 +97,9 @@ (buffer/push-uint32 buffer-uint32-le :le 0x01020304) (assert (= "\x04\x03\x02\x01" (string buffer-uint32-le)) "buffer/push-uint32 little endian") -(def buffer-uint32-negative @"") -(buffer/push-uint32 buffer-uint32-negative :be -1) -(assert (= "\xff\xff\xff\xff" (string buffer-uint32-negative)) "buffer/push-uint32 negative") +(def buffer-uint32-max @"") +(buffer/push-uint32 buffer-uint32-max :be 0xFFFFFFFF) +(assert (= "\xff\xff\xff\xff" (string buffer-uint32-max)) "buffer/push-uint32 max") (def buffer-float32-be @"") (buffer/push-float32 buffer-float32-be :be 1.234)