summaryrefslogtreecommitdiff
path: root/lisp/eshell/esh-opt.el
diff options
context:
space:
mode:
authorJay Kamat <jaygkamat@gmail.com>2018-05-08 12:04:00 -0700
committerNoam Postavsky <npostavs@gmail.com>2018-06-03 12:48:14 -0400
commit3ba5fc2bbec3f0f64c7afc1b05c9016710805463 (patch)
treeb9752fa378b61fd4f4b8f99e2fa959987cab2a1c /lisp/eshell/esh-opt.el
parent0ac98cc6edf45e5acdf5d1bf79764745ec444381 (diff)
downloademacs-3ba5fc2bbec3f0f64c7afc1b05c9016710805463.tar.gz
emacs-3ba5fc2bbec3f0f64c7afc1b05c9016710805463.tar.bz2
emacs-3ba5fc2bbec3f0f64c7afc1b05c9016710805463.zip
esh-opt.el: Fix improper parsing of first argument (Bug#28323)
Examples of broken behavior: sudo -u root whoami Outputs: -u ls -I '*.txt' /dev/null Errors with: *.txt: No such file or directory * lisp/eshell/esh-opt.el (eshell--process-args): Refactor usage of args to eshell--args, as we rely on modifications from eshell--process-option and vice versa. These modifications were not being propogated in the (if (= ai 0)) case, since popping the first element of a list doesn't destructively modify the underlying list object. (cherry picked from commit 92a8230e49a65be48442ee95cf50c90514e48f99)
Diffstat (limited to 'lisp/eshell/esh-opt.el')
-rw-r--r--lisp/eshell/esh-opt.el13
1 files changed, 7 insertions, 6 deletions
diff --git a/lisp/eshell/esh-opt.el b/lisp/eshell/esh-opt.el
index 3af8fd7cacb..7d0b362b4c4 100644
--- a/lisp/eshell/esh-opt.el
+++ b/lisp/eshell/esh-opt.el
@@ -244,26 +244,27 @@ switch is unrecognized."
options)))
(ai 0) arg
(eshell--args args))
- (while (< ai (length args))
- (setq arg (nth ai args))
+ (while (< ai (length eshell--args))
+ (setq arg (nth ai eshell--args))
(if (not (and (stringp arg)
(string-match "^-\\(-\\)?\\(.*\\)" arg)))
(setq ai (1+ ai))
(let* ((dash (match-string 1 arg))
(switch (match-string 2 arg)))
(if (= ai 0)
- (setq args (cdr args))
- (setcdr (nthcdr (1- ai) args) (nthcdr (1+ ai) args)))
+ (setq eshell--args (cdr eshell--args))
+ (setcdr (nthcdr (1- ai) eshell--args)
+ (nthcdr (1+ ai) eshell--args)))
(if dash
(if (> (length switch) 0)
(eshell--process-option name switch 1 ai options opt-vals)
- (setq ai (length args)))
+ (setq ai (length eshell--args)))
(let ((len (length switch))
(index 0))
(while (< index len)
(eshell--process-option name (aref switch index)
0 ai options opt-vals)
(setq index (1+ index))))))))
- (nconc (mapcar #'cdr opt-vals) args)))
+ (nconc (mapcar #'cdr opt-vals) eshell--args)))
;;; esh-opt.el ends here