diff --git a/src/text.c b/src/text.c index 2c6126e..6f8da95 100644 --- a/src/text.c +++ b/src/text.c @@ -4,6 +4,7 @@ #include "text.h" #include #include +#include #define ARRAY_NAME char #define ARRAY_TYPE char @@ -30,11 +31,13 @@ char *text_append_file(struct char_array *text, const char *const fn) { start = text->size; if(!(fp = fopen(fn, "r"))) goto catch; /* Read entire file in chunks. We don't allow any text file to go over - `INT_MAX` because `printf("%.*s", int, char *)` is used. */ + `INT_MAX` and `UINT32_MAX` because `printf("%.*s", int, char *)` is used + and we store it in an `uint32_t`. */ do if(!(cursor = char_array_buffer(text, granularity)) || (nread = fread(cursor, 1, granularity, fp), ferror(fp)) || !char_array_append(text, nread) - || text->size - start >= INT_MAX) goto catch; + || text->size - start >= (INT_MAX < UINT32_MAX ? INT_MAX : UINT32_MAX)) + goto catch; while(nread == granularity); /* File to `C` string. */ if(!(cursor = char_array_new(text))) goto catch;