GNU bug report logs - #59710
Wrong type argument when editing a multisession variable

Previous Next

Package: emacs;

Reported by: Juanma Barranquero <lekktu <at> gmail.com>

Date: Wed, 30 Nov 2022 01:51:02 UTC

Severity: normal

Found in version 29.0.60

Done: Juanma Barranquero <lekktu <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Juanma Barranquero <lekktu <at> gmail.com>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#59710: closed (Wrong type argument when editing a
 multisession variable)
Date: Fri, 02 Dec 2022 13:32:01 +0000
[Message part 1 (text/plain, inline)]
Your message dated Fri, 2 Dec 2022 14:30:52 +0100
with message-id <CAAeL0SR9Vp+3TKCcZVTNERk6n2cJvvDOHZKnD1VcdOoQ=eLrmg <at> mail.gmail.com>
and subject line Re: bug#59710: Wrong type argument when editing a multisession variable
has caused the debbugs.gnu.org bug report #59710,
regarding Wrong type argument when editing a multisession variable
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)


-- 
59710: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=59710
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Juanma Barranquero <lekktu <at> gmail.com>
To: Bug-Gnu-Emacs <bug-gnu-emacs <at> gnu.org>
Subject: Wrong type argument when editing a multisession variable
Date: Wed, 30 Nov 2022 02:49:15 +0100
[Message part 3 (text/plain, inline)]
Package: emacs
Version: 29.0.60
Severity: normal
X-Debbugs-Cc: "Lars Ingebrigtsen" <larsi <at> gnus.org>


;;; init.el
(require 'multisession)
(define-multisession-variable test-var nil "Test var" :package "test")
(setf (multisession-value test-var) t)
;;; end of init.el

emacs
M-x list-multisession-values <RET>
e

Debugger entered--Lisp error: (wrong-type-argument symbolp (intern (cdr
id)))
  multisession-edit-value(("test" . "test-var"))
  funcall-interactively(multisession-edit-value ("test" . "test-var"))
  command-execute(multisession-edit-value)


The problem comes from this change

  commit bd586121ac21e046f60f75eeb0200866c38d6f9f
  Author: Lars Ingebrigtsen <larsi <at> gnus.org>
  Date:   2022-01-22 11:56:13 +0100

      Make the test for existing multisession variables more sensible

      * lisp/emacs-lisp/multisession.el (multisession-edit-value):
      Unconfuse the code.

  diff --git a/lisp/emacs-lisp/multisession.el
b/lisp/emacs-lisp/multisession.el
  index 4a293796a8..25307594c6 100644
  --- a/lisp/emacs-lisp/multisession.el
  +++ b/lisp/emacs-lisp/multisession.el
  @@ -437,8 +437,8 @@ multisession-edit-value
     (let* ((object (or
                     ;; If the multisession variable already exists, use
                     ;; it (so that we update it).
  -                  (and (boundp (intern-soft (cdr id)))
  -                       (symbol-value (intern (cdr id))))
  +                  (and (intern-soft (cdr id))
  +                       (bound-and-true-p (intern (cdr id))))
                     ;; Create a new object.
                     (make-multisession
                      :package (car id)


because `bound-and-true-p' is a macro that requires as argument a symbol,
which (intern ...) is not.

ELISP> (bound-and-true-p (intern "whatever"))
*** Eval error ***  Wrong type argument: symbolp, (intern "whatever")

so I'm afraid this change was never tested.

The fix is reverting the change, doing perhaps this

diff --git a/lisp/emacs-lisp/multisession.el
b/lisp/emacs-lisp/multisession.el
index 9d6e8c0d88..78d4137317 100644
--- a/lisp/emacs-lisp/multisession.el
+++ b/lisp/emacs-lisp/multisession.el
@@ -447,8 +447,9 @@ multisession-edit-value
   (let* ((object (or
                   ;; If the multisession variable already exists, use
                   ;; it (so that we update it).
-                  (and (intern-soft (cdr id))
-                       (bound-and-true-p (intern (cdr id))))
+                  (if-let (sym (intern-soft (cdr id)))
+                      (and (boundp sym) (symbol-value sym))
+                    nil)
                   ;; Create a new object.
                   (make-multisession
                    :package (car id)
[Message part 4 (text/html, inline)]
[Message part 5 (message/rfc822, inline)]
From: Juanma Barranquero <lekktu <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: larsi <at> gnus.org, 59710-done <at> debbugs.gnu.org
Subject: Re: bug#59710: Wrong type argument when editing a multisession
 variable
Date: Fri, 2 Dec 2022 14:30:52 +0100
[Message part 6 (text/plain, inline)]
On Fri, Dec 2, 2022 at 2:07 PM Eli Zaretskii <eliz <at> gnu.org> wrote:

> This makes sense to me, so please go ahead and install (assuming that the
> multisession tests still all pass after this change).

Yes, they pass. Installed in commit e5b0141b0d of 2022-12-02.

BTW, I wonder if it would make sense to make bound-and-true-p to check that
it gets a symbol:

diff --git i/lisp/bindings.el w/lisp/bindings.el
index c1ad5f7520..6ee730af58 100644
--- i/lisp/bindings.el
+++ w/lisp/bindings.el
@@ -671,4 +671,6 @@ bound-and-true-p
 Note that if `lexical-binding' is in effect, this function isn't
 meaningful if it refers to a lexically bound variable."
+  (unless (symbolp var)
+    (error "Wrong type argument: symbolp, %S" var))
   `(and (boundp (quote ,var)) ,var))
[Message part 7 (text/html, inline)]

This bug report was last modified 2 years and 227 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.