summaryrefslogtreecommitdiff
path: root/Src/builtin.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/builtin.c')
-rw-r--r--Src/builtin.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/Src/builtin.c b/Src/builtin.c
index c7ed283a9..9465bb5a0 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -1446,6 +1446,20 @@ bin_fc(char *nam, char **argv, Options ops, int func)
unqueue_signals();
zwarnnam("fc", "can't open temp file: %e", errno);
} else {
+ /*
+ * Nasty behaviour results if we use the current history
+ * line here. Treat it as if it doesn't exist, unless
+ * that gives us an empty range.
+ */
+ if (last >= curhist) {
+ last = curhist - 1;
+ if (first > last) {
+ unqueue_signals();
+ zwarnnam("fc", "invalid use of current history line");
+ unlink(fil);
+ return 1;
+ }
+ }
ops->ind['n'] = 1; /* No line numbers here. */
if (!fclist(out, ops, first, last, asgf, pprog)) {
char *editor;