wdvi

network DVI viewer
Log | Files | Refs

commit 6a793481211ba1d88161cb1edfb06668cd968833
parent 5ae2d85a7d48cba02d6aacaaccc2a24bf74a0bf7
Author: Kyle Milz <krwmilz@gmail.com>
Date:   Tue, 14 Sep 2021 01:42:30 +0000

add error checking to fseek()

Diffstat:
Mdvi-init.c | 34+++++++++++++++++++++++-----------
1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/dvi-init.c b/dvi-init.c @@ -28,6 +28,7 @@ NOTE: \*========================================================================*/ #include <err.h> +#include <stdio.h> /* fseek() */ #include <X11/Shell.h> /* defines XtNtitle and XtNiconName */ @@ -503,10 +504,12 @@ find_postamble() ubyte *p1; ubyte byte; - fseek(dvi_file, (long) 0, 2); + if (fseek(dvi_file, 0, SEEK_END) != 0) + err(1, "fseek"); pos = ftell(dvi_file) - TMPSIZ; if (pos < 0) pos = 0; - fseek(dvi_file, pos, 0); + if (fseek(dvi_file, pos, SEEK_SET) != 0) + err(1, "fseek"); p = temp + fread((char *) temp, sizeof(char), TMPSIZ, dvi_file); for (;;) { p1 = p; @@ -521,14 +524,17 @@ find_postamble() pos += p - temp; byte = *p; while (byte == TRAILER) { - fseek(dvi_file, --pos, 0); + if (fseek(dvi_file, --pos, SEEK_SET) != 0) + err(1, "fseek"); byte = one(dvi_file); } if (byte != 2) /* Wrong version of DVI output for this program */ return False; - fseek(dvi_file, pos - 4, 0); - fseek(dvi_file, sfour(dvi_file), 0); + if (fseek(dvi_file, pos - 4, SEEK_SET) != 0) + err(1, "fseek"); + if (fseek(dvi_file, sfour(dvi_file), SEEK_SET) != 0) + err(1, "fseek"); return True; } @@ -664,7 +670,7 @@ prepare_pages() { int i; - page_info = xmalloc((unsigned) (total_pages + 1) * sizeof *page_info); + page_info = xmalloc((unsigned) (total_pages + 1) * sizeof(*page_info)); page_info->pw = unshrunk_paper_w; page_info->ph = unshrunk_paper_h; page_info->ww = dvi_unshrunk_page_w; @@ -673,14 +679,18 @@ prepare_pages() i = total_pages; page_info[--i].offset = last_page_offset; - fseek(dvi_file, last_page_offset, 0); + if (fseek(dvi_file, last_page_offset, SEEK_SET) != 0) + err(1, "fseek"); /* * Follow back pointers through pages in the DVI file, * storing the offsets in the page_info[].offset table. */ while (i > 0) { - fseek(dvi_file, (long) (1+4+(9*4)), 1); - fseek(dvi_file, page_info[--i].offset = four(dvi_file), 0); + if (fseek(dvi_file, (long) (1+4+(9*4)), SEEK_CUR) != 0) + err(1, "fseek"); + if (fseek(dvi_file, page_info[--i].offset = four(dvi_file), + SEEK_SET) != 0) + err(1, "fseek"); } } @@ -749,7 +759,8 @@ init_dvi_file() goto err; prepare_pages(); - if (current_page >= total_pages) current_page = total_pages - 1; + if (current_page >= total_pages) + current_page = total_pages - 1; warn_spec_now = warn_spec; init_prescan(); set_titles(); @@ -797,7 +808,8 @@ reload_dvi_file() for (fontp = font_head; fontp != NULL; fontp = fontp->next) fontp->flags &= ~FONT_IN_USE; - fseek(dvi_file, (long) 0, 0); + if (fseek(dvi_file, 0, SEEK_SET) != 0) + err(1, "fseek"); if (!init_dvi_file()) return False; if (list_fonts)