aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/shell.el
diff options
context:
space:
mode:
authorFilipp Gunbin2016-10-26 14:31:12 -0400
committerStefan Monnier2016-10-26 14:31:12 -0400
commit4e45b55a9566189af6e40449954504ea7c47fa90 (patch)
tree79a6e472f68ec320cc0128eb15ec42e78eb58cbb /lisp/shell.el
parent5edf76ba15fb012e9cb3112ee4a2c9ef4b02f20e (diff)
downloademacs-4e45b55a9566189af6e40449954504ea7c47fa90.tar.gz
emacs-4e45b55a9566189af6e40449954504ea7c47fa90.zip
* lisp/shell.el (shell--unquote&requote-argument): Match data misuse
* lisp/shell.el (shell--unquote&requote-argument): Fix off-by-one thinko. Don't use match data after a failed string-match.
Diffstat (limited to 'lisp/shell.el')
-rw-r--r--lisp/shell.el10
1 files changed, 7 insertions, 3 deletions
diff --git a/lisp/shell.el b/lisp/shell.el
index 1f019f20f3a..34bd77282ab 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -384,11 +384,15 @@ Thus, this does not include the shell's current directory.")
384 ((eq (aref qstr match) ?\") (setq dquotes (not dquotes))) 384 ((eq (aref qstr match) ?\") (setq dquotes (not dquotes)))
385 ((eq (aref qstr match) ?\') 385 ((eq (aref qstr match) ?\')
386 (cond 386 (cond
387 ;; Treat single quote as text if inside double quotes.
387 (dquotes (funcall push "'" (match-end 0))) 388 (dquotes (funcall push "'" (match-end 0)))
388 ((< match (1+ (length qstr))) 389 ((< (1+ match) (length qstr))
389 (let ((end (string-match "'" qstr (1+ match)))) 390 (let ((end (string-match "'" qstr (1+ match))))
390 (funcall push (substring qstr (1+ match) end) 391 (unless end
391 (or end (length qstr))))) 392 (setq end (length qstr))
393 (set-match-data (list match (length qstr))))
394 (funcall push (substring qstr (1+ match) end) end)))
395 ;; Ignore if at the end of string.
392 (t nil))) 396 (t nil)))
393 (t (error "Unexpected case in shell--unquote&requote-argument!"))) 397 (t (error "Unexpected case in shell--unquote&requote-argument!")))
394 (setq qpos (match-end 0))) 398 (setq qpos (match-end 0)))