]> git.eshelyaron.com Git - emacs.git/commitdiff
Validate SPEC of `dolist', cf. Bug#25477.
authorPhilipp Stephani <phst@google.com>
Sun, 26 Mar 2017 18:53:43 +0000 (20:53 +0200)
committerPhilipp Stephani <phst@google.com>
Sat, 8 Apr 2017 15:15:31 +0000 (17:15 +0200)
* lisp/subr.el (dolist): Test type and length of SPEC.
* test/lisp/subr-tests.el (subr-tests--dolist--wrong-number-of-args):
Add unit test.

lisp/subr.el
test/lisp/subr-tests.el

index 13567d8753e21549ccaf0a3e9c2adb2b42ad6ed7..1dd5d2ffef9a13a2f9efeea041ca80403c5a9f8d 100644 (file)
@@ -190,6 +190,10 @@ Then evaluate RESULT to get return value, default nil.
 
 \(fn (VAR LIST [RESULT]) BODY...)"
   (declare (indent 1) (debug ((symbolp form &optional form) body)))
+  (unless (consp spec)
+    (signal 'wrong-type-argument (list 'consp spec)))
+  (unless (<= 2 (length spec) 3)
+    (signal 'wrong-number-of-arguments (list '(2 . 3) (length spec))))
   ;; It would be cleaner to create an uninterned symbol,
   ;; but that uses a lot more space when many functions in many files
   ;; use dolist.
index a3b08e969713d6a5cb516a4df6e19a735cc96488..0d243cc5d8c26367c9fa28b852ffe25fca5e9014 100644 (file)
@@ -281,5 +281,15 @@ indirectly `mapbacktrace'."
   (should (equal (string-match-p "\\`[[:blank:]]\\'" "\u3000") 0))
   (should-not (string-match-p "\\`[[:blank:]]\\'" "\N{LINE SEPARATOR}")))
 
+(ert-deftest subr-tests--dolist--wrong-number-of-args ()
+  "Test that `dolist' doesn't accept wrong types or length of SPEC,
+cf. Bug#25477."
+  (should-error (eval '(dolist (a)))
+                :type 'wrong-number-of-arguments)
+  (should-error (eval '(dolist (a () 'result 'invalid)) t)
+                :type 'wrong-number-of-arguments)
+  (should-error (eval '(dolist "foo") t)
+                :type 'wrong-type-argument))
+
 (provide 'subr-tests)
 ;;; subr-tests.el ends here