aboutsummaryrefslogtreecommitdiffstats
path: root/libskrift_open_font_fd.c
diff options
context:
space:
mode:
Diffstat (limited to 'libskrift_open_font_fd.c')
-rw-r--r--libskrift_open_font_fd.c3
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;
}