diff options
author | Jay Kamat <jaygkamat@gmail.com> | 2018-05-08 12:04:00 -0700 |
---|---|---|
committer | Noam Postavsky <npostavs@gmail.com> | 2018-06-03 12:48:14 -0400 |
commit | 3ba5fc2bbec3f0f64c7afc1b05c9016710805463 (patch) | |
tree | b9752fa378b61fd4f4b8f99e2fa959987cab2a1c /lisp/eshell/esh-opt.el | |
parent | 0ac98cc6edf45e5acdf5d1bf79764745ec444381 (diff) | |
download | emacs-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.el | 13 |
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 |