]> git.eshelyaron.com Git - emacs.git/commitdiff
Make input constraints into memoization hash immutable (bug#45376)
authorAndrea Corallo <akrl@sdf.org>
Wed, 23 Dec 2020 09:46:33 +0000 (10:46 +0100)
committerAndrea Corallo <akrl@sdf.org>
Wed, 23 Dec 2020 09:58:42 +0000 (10:58 +0100)
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1)
(comp-cstr-intersection): Copy input before soting it into the
memoization hash table.

lisp/emacs-lisp/comp-cstr.el
test/src/comp-test-funcs.el
test/src/comp-tests.el

index aaeb9cf3e9b81fc4eee68d3d6b36960f071be0a2..480d15616a0f58bba6c49a66c2a6bc55d179f426 100644 (file)
@@ -507,7 +507,7 @@ DST is returned."
                     (comp-cstr-ctxt-union-1-mem-no-range comp-ctxt)))
            (res (or (gethash srcs mem-h)
                     (puthash
-                     srcs
+                     (mapcar #'comp-cstr-copy srcs)
                      (apply #'comp-cstr-union-1-no-mem range srcs)
                      mem-h))))
       (setf (typeset dst) (typeset res)
@@ -676,7 +676,7 @@ DST is returned."
     (let* ((mem-h (comp-cstr-ctxt-intersection-mem comp-ctxt))
            (res (or (gethash srcs mem-h)
                     (puthash
-                     srcs
+                     (mapcar #'comp-cstr-copy srcs)
                      (apply #'comp-cstr-intersection-no-mem srcs)
                      mem-h))))
       (setf (typeset dst) (typeset res)
index a2663eaf9cfc53feab3bee95696fae32685dc950..d6bcfca2d944e1fe3bf466531ef98e2877508f1a 100644 (file)
        (setq args (cons (substring arg start pos) args))))
     args))
 
+(defun comp-test-45376-f ()
+  ;; Reduced from `eshell-ls-find-column-lengths'.
+  (let* (res
+        (len 2)
+        (i 0)
+        (j 0))
+    (while (< j len)
+      (if (= i len)
+         (setq i 0))
+      (setq res (cons i res)
+           j (1+ j)
+           i (1+ i)))
+    res))
+
 \f
 ;;;;;;;;;;;;;;;;;;;;
 ;; Tromey's tests ;;
index 0594a4e086c585fc7cac79e9231e8ef997b6198d..5f2d702fca0e4cbedc072b3f1591a9b12c317fb0 100644 (file)
@@ -409,6 +409,10 @@ https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html."
   "Broken call args assumptions lead to infinite loop."
   (should (equal (comp-test-assume-in-loop-1-f "cd") '("cd"))))
 
+(comp-deftest bug-45376 ()
+  "<https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-12/msg01883.html>"
+  (should (equal (comp-test-45376-f) '(1 0))))
+
 (defvar comp-test-primitive-advice)
 (comp-deftest primitive-advice ()
   "Test effectiveness of primitive advicing."