diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2018-02-23 16:47:10 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2018-02-23 16:47:10 +0000 |
commit | 80efcef53673f36280ca99580440e83be98e2286 (patch) | |
tree | f4634a984e2574321504ecea789e1a3e38a9990a | |
parent | 1bc6ab722f082440bad4dc064025f98486495299 (diff) | |
download | mandoc-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.c | 4 | ||||
-rw-r--r-- | tag.c | 5 |
2 files changed, 6 insertions, 3 deletions
@@ -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. */ @@ -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 |