From 0cdb4ad8e5c41c2e6fd3b5a5608f965a2046cc0b Mon Sep 17 00:00:00 2001 From: Pietro Cerutti Date: Tue, 24 Jan 2017 16:28:45 +0000 Subject: [PATCH] Avoid cyclic checks on pipes Pull: #290 --- init.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/init.c b/init.c index 9e2480630..fd5cc6d70 100644 --- a/init.c +++ b/init.c @@ -2671,28 +2671,35 @@ static int source_rc (const char *rcfile_path, BUFFER *err) strncpy(rcfile, rcfile_path, PATH_MAX); - if (!to_absolute_path(rcfile, mutt_front_heap(MuttrcHeap))) - { - mutt_error("Error: impossible to build path of '%s'.", rcfile_path); - return (-1); - } - dprint(2, (debugfile, "Reading configuration file '%s'.\n", rcfile)); - if (!MuttrcHeap || mutt_find_heap(MuttrcHeap, rcfile) == NULL) - { - mutt_push_heap(&MuttrcHeap, rcfile); - } - else + if ((f = mutt_open_read (rcfile, &pid)) == NULL) { - mutt_error("Error: Cyclic sourcing of configuration file '%s'.", rcfile); + snprintf (err->data, err->dsize, "%s: %s", rcfile, strerror (errno)); return (-1); } - if ((f = mutt_open_read (rcfile, &pid)) == NULL) + /* Avoid cyclic sourcing checks on pipes */ + if (pid == -1) { - snprintf (err->data, err->dsize, "%s: %s", rcfile, strerror (errno)); - return (-1); + if (!to_absolute_path(rcfile, mutt_front_heap(MuttrcHeap))) + { + mutt_error("Error: impossible to build path of '%s'.", rcfile_path); + safe_fclose (&f); + return (-1); + } + + + if (!MuttrcHeap || mutt_find_heap(MuttrcHeap, rcfile) == NULL) + { + mutt_push_heap(&MuttrcHeap, rcfile); + } + else + { + mutt_error("Error: Cyclic sourcing of configuration file '%s'.", rcfile); + safe_fclose (&f); + return (-1); + } } mutt_buffer_init (&token); -- 2.40.0