diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-05-06 22:27:59 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-05-06 22:27:59 -0400 |
| commit | 46555c558870e8b96f1ce361d74fc404ca13c471 (patch) | |
| tree | e0b01a6a2b5a99754bbc1ca7131a37a8badc9d54 /src/stdlib/lists.c | |
| parent | 817adbf22592955244aecad435ce0555707dba1a (diff) | |
Check return values
Diffstat (limited to 'src/stdlib/lists.c')
| -rw-r--r-- | src/stdlib/lists.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/stdlib/lists.c b/src/stdlib/lists.c index c73d20dd..c1c119a0 100644 --- a/src/stdlib/lists.c +++ b/src/stdlib/lists.c @@ -297,7 +297,7 @@ static int64_t _default_random_int64(int64_t min, int64_t max, void *userdata) uint64_t min_r = -range % range; uint64_t r; for (;;) { - getrandom(&r, sizeof(r), 0); + assert(getrandom(&r, sizeof(r), 0) == sizeof(r)); if (r >= min_r) break; } return (int64_t)((uint64_t)min + (r % range)); @@ -361,7 +361,7 @@ static double _default_random_num(void *userdata) Num_t num; uint64_t bits; } r = {.bits=0}, one = {.num=1.0}; - getrandom((uint8_t*)&r, sizeof(r), 0); + assert(getrandom((uint8_t*)&r, sizeof(r), 0) == sizeof(r)); // Set r.num to 1.<random-bits> r.bits &= ~(0xFFFULL << 52); @@ -808,10 +808,14 @@ public void List$deserialize(FILE *in, void *obj, List_t *pointers, const TypeIn for (int64_t i = 0; i < len; i++) item_deserialize(in, list.data + i*list.stride, pointers, type->ListInfo.item); } else if (list.stride == type->ListInfo.item->size) { - fread(list.data, (size_t)type->ListInfo.item->size, (size_t)len, in); + if (fread(list.data, (size_t)type->ListInfo.item->size, (size_t)len, in) != (size_t)len) + fail("Not enough data in stream to deserialize"); } else { - for (int64_t i = 0; i < len; i++) - fread(list.data + i*list.stride, (size_t)type->ListInfo.item->size, 1, in); + size_t item_size = (size_t)type->ListInfo.item->size; + for (int64_t i = 0; i < len; i++) { + if (fread(list.data + i*list.stride, item_size, 1, in) != item_size) + fail("Not enough data in stream to deserialize"); + } } *(List_t*)obj = list; } |
