emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 2ea98ea35c8: Avoid errors when a restricted-sexp widget is empty


From: Eli Zaretskii
Subject: master 2ea98ea35c8: Avoid errors when a restricted-sexp widget is empty
Date: Sat, 16 Sep 2023 05:58:09 -0400 (EDT)

branch: master
commit 2ea98ea35c82da31ef419da3b49789ab750e8e00
Author: Mauro Aranda <maurooaranda@gmail.com>
Commit: Eli Zaretskii <eliz@gnu.org>

    Avoid errors when a restricted-sexp widget is empty
    
    * lisp/wid-edit.el (restricted-sexp): Don't try to read
    an empty string when converting the current value to the
    external format.  (Bug#63838)
    
    * test/lisp/wid-edit-tests.el (widget-test-restricted-sexp-empty-val):
    New test.
---
 lisp/wid-edit.el            |  4 +++-
 test/lisp/wid-edit-tests.el | 11 +++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index d18d721f7ed..74412414113 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -3681,7 +3681,9 @@ match-alternatives: %S"
                           :warning)
                          ;; Make sure we will `read' a string.
                          (setq value (prin1-to-string value)))
-                       (read value)))
+                       (if (string-empty-p value)
+                           value
+                       (read value))))
 
 (defun widget-restricted-sexp-match (widget value)
   (let ((alternatives (widget-get widget :match-alternatives))
diff --git a/test/lisp/wid-edit-tests.el b/test/lisp/wid-edit-tests.el
index ebfe729bc9a..66bff4ad2e3 100644
--- a/test/lisp/wid-edit-tests.el
+++ b/test/lisp/wid-edit-tests.el
@@ -380,4 +380,15 @@ return nil, even with a non-nil bubblep argument."
                                     :value (("1" . 1) ("2" . 2))))))
       (should (equal '(("1" . 1) ("2" . 2)) (widget-default-get w))))))
 
+(ert-deftest widget-test-restricted-sexp-empty-val ()
+  "Test that we handle an empty restricted-sexp widget just fine."
+  (with-temp-buffer
+    (let ((w (widget-create '(restricted-sexp
+                              :value 3
+                              :match-alternatives (integerp)))))
+      (widget-setup)
+      (widget-backward 1)
+      (delete-char 1)
+      (should (string= (widget-value w) "")))))
+
 ;;; wid-edit-tests.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]