diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2021-05-12 17:36:24 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2021-05-12 17:36:24 +0200 |
commit | 417d53db2bcafeab54b37c59667f8dee63ffd0fb (patch) | |
tree | 72705059224863a0ddcfb5f970dd57c0f86cdaad | |
parent | bc1a01172e2725503628914f019192c0e59260a3 (diff) | |
download | emacs-417d53db2bcafeab54b37c59667f8dee63ffd0fb.tar.gz |
Fix `uniquify-managed' unbounded growth
* lisp/uniquify.el (uniquify-rationalize-file-buffer-names):
Protect against exponential `uniquify-managed' growth when
reverting several (more than two) buffers that have the same file
name (bug#36877).
-rw-r--r-- | lisp/uniquify.el | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/lisp/uniquify.el b/lisp/uniquify.el index 7cc01687f49..ffb5ecc9024 100644 --- a/lisp/uniquify.el +++ b/lisp/uniquify.el @@ -246,7 +246,14 @@ this rationalization." (if (buffer-live-p (uniquify-item-buffer item)) item)) items))) - (setq fix-list (append fix-list items)))) + ;; Other buffer's `uniquify-managed' lists may share + ;; elements. Ensure that we don't add these elements more + ;; than once to this buffer's `uniquify-managed' list. + (let ((new-items nil)) + (dolist (item items) + (unless (memq item fix-list) + (push item new-items))) + (setq fix-list (append fix-list new-items))))) ;; selects buffers whose names may need changing, and others that ;; may conflict, then bring conflicting names together (uniquify-rationalize fix-list)))) |