In theory, these calls could fail, but it is not really likely to happen in practice in the use case here. Anyway, check that they do not return an error before accepting the length of the file.
@@ -315,14 +315,21 @@ char * os_readfile(const char *name, size_t *len)
{
FILE *f;
char *buf;
+ long pos;
f = fopen(name, "rb");
if (f == NULL)
return NULL;
- fseek(f, 0, SEEK_END);
- *len = ftell(f);
- fseek(f, 0, SEEK_SET);
+ if (fseek(f, 0, SEEK_END) < 0 || (pos = ftell(f)) < 0) {
+ fclose(f);
+ return NULL;
+ }
+ *len = pos;
+ if (fseek(f, 0, SEEK_SET) < 0) {
buf = os_malloc(*len);
if (buf == NULL) {