From cd2cab2a94d9602c396d79d2c65615e20d768d1e Mon Sep 17 00:00:00 2001 From: rlar Date: Sun, 22 Jul 2012 11:56:25 +0200 Subject: [PATCH] bug fix, cp_ioreset(): fclosing an already closed stream causing memory corruption when using `>&' stderr redirection --- src/frontend/streams.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/frontend/streams.c b/src/frontend/streams.c index cf1776af8..089b74bf9 100644 --- a/src/frontend/streams.c +++ b/src/frontend/streams.c @@ -184,21 +184,19 @@ error: wl_free(wl); void cp_ioreset(void) { - if (cp_in != cp_curin) { + if (cp_in != cp_curin) if (cp_in) fclose(cp_in); - cp_in = cp_curin; - } - if (cp_out != cp_curout) { + if (cp_out != cp_curout) if (cp_out) fclose(cp_out); - cp_out = cp_curout; - } - if (cp_err != cp_curerr) { - if (cp_err) + if (cp_err != cp_curerr) + if (cp_err && cp_err != cp_out) fclose(cp_err); - cp_err = cp_curerr; - } + + cp_in = cp_curin; + cp_out = cp_curout; + cp_err = cp_curerr; /*** Minor bug here... */ out_isatty = TRUE;