diff options
Diffstat (limited to 'libskrift_open_font_fd.c')
-rw-r--r-- | libskrift_open_font_fd.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libskrift_open_font_fd.c b/libskrift_open_font_fd.c index c00422e..e134cd8 100644 --- a/libskrift_open_font_fd.c +++ b/libskrift_open_font_fd.c @@ -13,6 +13,7 @@ libskrift_open_font_fd(LIBSKRIFT_FONT **fontp, int fd) saved_errno = errno; if (fstat(fd, &st) < 0 || !st.st_size || !S_ISREG(st.st_mode)) { + fallback: for (;;) { if (off + 2048 > size) { size += 8192; @@ -39,6 +40,8 @@ libskrift_open_font_fd(LIBSKRIFT_FONT **fontp, int fd) errno = saved_errno; } else { mem = mmap(NULL, (size_t)st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); + if (mem == MAP_FAILED || !mem) + goto fallback; size = (size_t)st.st_size; mmapped = 1; } |