aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2018-02-23 16:47:10 +0000
committerIngo Schwarze <schwarze@openbsd.org>2018-02-23 16:47:10 +0000
commit80efcef53673f36280ca99580440e83be98e2286 (patch)
treef4634a984e2574321504ecea789e1a3e38a9990a
parent1bc6ab722f082440bad4dc064025f98486495299 (diff)
downloadmandoc-80efcef53673f36280ca99580440e83be98e2286.tar.gz
mandoc-80efcef53673f36280ca99580440e83be98e2286.tar.zst
mandoc-80efcef53673f36280ca99580440e83be98e2286.zip
Invalidate the tag_files.tfd after fclose(3)ing the stram associated
with it. In main() assert that the tfd was actually invalidated. This avoids closing an invalid fd. From tb@; OK deraadt@ on an earlier version.
-rw-r--r--main.c4
-rw-r--r--tag.c5
2 files changed, 6 insertions, 3 deletions
diff --git a/main.c b/main.c
index 5421a77c..e65d90a1 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.302 2017/08/21 15:42:58 schwarze Exp $ */
+/* $Id: main.c,v 1.303 2018/02/23 16:47:10 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -1184,7 +1184,7 @@ spawn_pager(struct tag_files *tag_files)
if (dup2(tag_files->ofd, STDOUT_FILENO) == -1)
err((int)MANDOCLEVEL_SYSERR, "pager stdout");
close(tag_files->ofd);
- close(tag_files->tfd);
+ assert(tag_files->tfd == -1);
/* Do not start the pager before controlling the terminal. */
diff --git a/tag.c b/tag.c
index 21ac6b32..c0832c4f 100644
--- a/tag.c
+++ b/tag.c
@@ -1,4 +1,4 @@
-/* $Id: tag.c,v 1.18 2017/02/17 14:31:52 schwarze Exp $ */
+/* $Id: tag.c,v 1.19 2018/02/23 16:47:10 schwarze Exp $ */
/*
* Copyright (c) 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -213,6 +213,9 @@ tag_write(void)
ohash_delete(&tag_data);
if (stream != NULL)
fclose(stream);
+ else
+ close(tag_files.tfd);
+ tag_files.tfd = -1;
}
void