Hi,

p_filesize is of type long, but we assign an off_t.  Before assignment,
check if it will fit.  Also, check if fstat was successful or not.


Tobias

Index: pch.c
===================================================================
RCS file: /cvs/src/usr.bin/patch/pch.c,v
retrieving revision 1.41
diff -u -p -r1.41 pch.c
--- pch.c       26 Nov 2013 13:19:07 -0000      1.41
+++ pch.c       16 Nov 2014 20:21:13 -0000
@@ -112,7 +112,10 @@ open_patch_file(const char *filename)
        pfp = fopen(filename, "r");
        if (pfp == NULL)
                pfatal("patch file %s not found", filename);
-       fstat(fileno(pfp), &filestat);
+       if (fstat(fileno(pfp), &filestat))
+               pfatal("can't stat %s", filename);
+       if (filestat.st_size > LONG_MAX)
+               pfatal("patch file %s is too large", filename);
        p_filesize = filestat.st_size;
        next_intuit_at(0L, 1L); /* start at the beginning */
        set_hunkmax();

Reply via email to