]> git.cameronkatri.com Git - mandoc.git/commitdiff
When the stdout stream gets broken, there is no point in reading
authorIngo Schwarze <schwarze@openbsd.org>
Mon, 21 Aug 2017 15:42:58 +0000 (15:42 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Mon, 21 Aug 2017 15:42:58 +0000 (15:42 +0000)
any more input files, and it would be misleading to start a parser,
because that would show randomly truncated text.
Instead, print an error message and exit the program.

Issue found by Leah Neukirchen <leah at vuxu dot org>, who was
surprised to see half a manpage when her /tmp/ overflew.

main.c

diff --git a/main.c b/main.c
index 7f1411a6fbcccaa60e3cbbd5542566f6938c2c84..5421a77c2a69f317b69f68749e57988d490d9419 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/*     $Id: main.c,v 1.301 2017/07/26 10:21:55 schwarze Exp $ */
+/*     $Id: main.c,v 1.302 2017/08/21 15:42:58 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -484,6 +484,17 @@ main(int argc, char *argv[])
                                passthrough(resp->file, fd,
                                    conf.output.synopsisonly);
 
+                       if (ferror(stdout)) {
+                               if (tag_files != NULL) {
+                                       warn("%s", tag_files->ofn);
+                                       tag_unlink();
+                                       tag_files = NULL;
+                               } else
+                                       warn("stdout");
+                               rc = MANDOCLEVEL_SYSERR;
+                               break;
+                       }
+
                        if (argc > 1 && curp.outtype <= OUTT_UTF8) {
                                if (curp.outdata == NULL)
                                        outdata_alloc(&curp);