=================================================================== RCS file: /cvs/mandoc/read.c,v retrieving revision 1.128 retrieving revision 1.133 diff -u -p -r1.128 -r1.133 --- mandoc/read.c 2015/02/23 13:31:04 1.128 +++ mandoc/read.c 2015/04/02 21:36:50 1.133 @@ -1,4 +1,4 @@ -/* $Id: read.c,v 1.128 2015/02/23 13:31:04 schwarze Exp $ */ +/* $Id: read.c,v 1.133 2015/04/02 21:36:50 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010-2015 Ingo Schwarze @@ -8,9 +8,9 @@ * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -36,11 +37,12 @@ #include #include -#include "mandoc.h" #include "mandoc_aux.h" -#include "libmandoc.h" +#include "mandoc.h" +#include "roff.h" #include "mdoc.h" #include "man.h" +#include "libmandoc.h" #define REPARSE_LIMIT 1000 @@ -636,7 +638,7 @@ read_whole_file(struct mparse *curp, const char *file, */ if (S_ISREG(st.st_mode)) { - if (st.st_size >= (1U << 31)) { + if (st.st_size > 0x7fffffff) { mandoc_msg(MANDOCERR_TOOLARGE, curp, 0, 0, NULL); return(0); } @@ -846,6 +848,7 @@ mparse_open(struct mparse *curp, int *fd, const char * perror("dup"); exit((int)MANDOCLEVEL_SYSERR); } + signal(SIGPIPE, SIG_DFL); execlp("gunzip", "gunzip", "-c", file, NULL); perror("exec"); exit((int)MANDOCLEVEL_SYSERR); @@ -868,6 +871,7 @@ mparse_wait(struct mparse *curp) perror("wait"); exit((int)MANDOCLEVEL_SYSERR); } + curp->child = 0; if (WIFSIGNALED(status)) { mandoc_vmsg(MANDOCERR_FILE, curp, 0, 0, "gunzip died from signal %d", WTERMSIG(status));