summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2021-05-12 17:36:24 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2021-05-12 17:36:24 +0200
commit417d53db2bcafeab54b37c59667f8dee63ffd0fb (patch)
tree72705059224863a0ddcfb5f970dd57c0f86cdaad
parentbc1a01172e2725503628914f019192c0e59260a3 (diff)
downloademacs-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.el9
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))))