aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/main.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-10-18 15:57:34 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-10-18 15:57:34 +0000
commit867ec9d5be8ed8f6d221a1f9689d54aaaf811f22 (patch)
treefd4ede39a3121482ee7e1acbc3025652c8699cd8 /main.c
parent3b2a0945b5ed108c60a317a21b84e4da6b52b312 (diff)
downloadmandoc-867ec9d5be8ed8f6d221a1f9689d54aaaf811f22.tar.gz
mandoc-867ec9d5be8ed8f6d221a1f9689d54aaaf811f22.tar.zst
mandoc-867ec9d5be8ed8f6d221a1f9689d54aaaf811f22.zip
plug file descriptor leaks on read or write failure;
hinted at by Steffen Nurpmeso <sdaoden at yandex dot com>.
Diffstat (limited to 'main.c')
-rw-r--r--main.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/main.c b/main.c
index 620cd6c1..f6597b84 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.192 2014/09/03 23:21:47 schwarze Exp $ */
+/* $Id: main.c,v 1.193 2014/10/18 15:57:34 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011, 2012, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -581,14 +581,15 @@ passthrough(const char *file, int fd)
for (off = 0; off < nr; off += nw)
if ((nw = write(STDOUT_FILENO, buf + off,
(size_t)(nr - off))) == -1 || nw == 0) {
+ close(fd);
syscall = "write";
goto fail;
}
- if (nr == 0) {
- close(fd);
+ close(fd);
+
+ if (nr == 0)
return(MANDOCLEVEL_OK);
- }
syscall = "read";
fail: