GNU bug report logs - #57115
emacs 29 ~commandp~ check function ~find-file~ loop without termination while ~find-file~ is adviced nested up to 20 level

Previous Next

Package: emacs;

Reported by: Pythonora Nybon <bmsac0001 <at> gmail.com>

Date: Wed, 10 Aug 2022 12:31:02 UTC

Severity: normal

Fixed in version 29.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 57115 in the body.
You can then email your comments to 57115 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#57115; Package emacs. (Wed, 10 Aug 2022 12:31:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Pythonora Nybon <bmsac0001 <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Wed, 10 Aug 2022 12:31:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Pythonora Nybon <bmsac0001 <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: emacs 29 ~commandp~ check function ~find-file~ loop without
 termination while ~find-file~ is adviced nested up to 20 level
Date: Wed, 10 Aug 2022 08:55:09 +0800
[Message part 1 (text/plain, inline)]
Dear emacs maintenance team:

I found a seriously bug in the latest emacs master development branch
(i.e. the next-stage emacs 29 version) which may cause seriously
compatibility issues for older emacs users, please see the description
below:

# Description:

**NOTE: It's a seriously fatal bug**

It seems the new `oclosure` internal API invocation caused this issue
since it modified `advice` refers. And there's no problem in
emacs-28 and further older versions.

This bug will definitely broke the user emacs config compatibility
while they update to 29, since many user use **non-side-effects
advice** to inject their owns habits into the vanilla emacs
specification.

I use the `find-file` just as a example but the bug seemly effects on
most of the `advice` behaviour covered on others occasions.

Reproduce:

Insert below snippet as your `init.el` and run with vanilla emacs 29
session.

``` elisp

(toggle-debug-on-quit)
;; (toggle-frame-maximized)
;; (package-initialize)
(require 'files)
(require 'help)
(with-temp-message
    (substitute-command-keys
     (format
      "emacs %s is hang of `commandp' loop via advice to `find-file', \
please hint `\\[keyboard-quit]' to see the backtrace."
      emacs-major-version))
  (dotimes (cnt 20)
    (let ((sym (intern (format "test-advice/cnt-%s" cnt))))
      (eval
       `(progn
          (defun ,sym (&rest _)
            nil)
          (advice-add 'find-file :before ',sym)))))
  (commandp 'find-file))

```

# SYSTEM informations

```

In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.34, cairo version 1.17.6) of 2022-07-28 built on
 HOMEPC. Repository revision:
 163424e04b7f75a1655fd263ba4b6d6d4fa880b2 Repository branch: HEAD
 Windowing system distributor 'The X.Org Foundation', version
 11.0.12201003 System Description: Arch Linux

Configured using: 'configure --prefix=/usr/local/share/emacs/29.0.50/
 --with-mailutils --with-imagemagick'

Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM
GSETTINGS HARFBUZZ IMAGEMAGICK JPEG JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2
M17N_FLT MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3
THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB

Important settings: value of $LANG: en_US.UTF-8 locale-coding-system:
  utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-mode:
  t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t
  tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t
  global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t
  line-number-mode: t indent-tabs-mode: t transient-mark-mode: t
  auto-composition-mode: t auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows: None found.

Features: (shadow sort mail-extr emacsbug message mailcap yank-media
puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived
epg rfc6068 epg-config gnus-util text-property-search time-date subr-x
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr
mail-utils help-fns radix-tree cl-print byte-opt gv bytecomp
byte-compile cconv debug backtrace help-mode find-func cl-loaddefs
cl-lib cus-start cus-load rmc iso-transl tooltip eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
faces cus-face macroexp files window text-properties overlay sha1 md5
base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting cairo
move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process
emacs)

Memory information: ((conses 16 113315 7232) (symbols 48 7241 0)
(strings 32 19051 975) (string-bytes 1 602973) (vectors 16 11955)
(vector-slots 8 171420 9118) (floats 8 24 26) (intervals 56 5526 0)
(buffers 992 12))

```
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57115; Package emacs. (Fri, 12 Aug 2022 15:29:02 GMT) Full text and rfc822 format available.

Message #8 received at 57115 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Pythonora Nybon <bmsac0001 <at> gmail.com>
Cc: 57115 <at> debbugs.gnu.org, Stefan Monnier <monnier <at> iro.umontreal.ca>
Subject: Re: bug#57115: emacs 29 ~commandp~ check function ~find-file~ loop
 without termination while ~find-file~ is adviced nested up to 20 level
Date: Fri, 12 Aug 2022 17:27:53 +0200
Pythonora Nybon <bmsac0001 <at> gmail.com> writes:

> Insert below snippet as your `init.el` and run with vanilla emacs 29 session.
>
> ``` elisp
>
> (toggle-debug-on-quit)
> ;; (toggle-frame-maximized)
> ;; (package-initialize)
> (require 'files)
> (require 'help)
> (with-temp-message
>     (substitute-command-keys
>      (format
>       "emacs %s is hang of `commandp' loop via advice to `find-file', \
> please hint `\\[keyboard-quit]' to see the backtrace."
>       emacs-major-version))
>   (dotimes (cnt 20)
>     (let ((sym (intern (format "test-advice/cnt-%s" cnt))))
>       (eval
>        `(progn
>           (defun ,sym (&rest _)
>             nil)
>           (advice-add 'find-file :before ',sym)))))
>   (commandp 'find-file))

I'm not quite sure what this code snippet is attempting to achieve, but
it does hang in Emacs 29, and it didn't in Emacs 28.

Adding Stefan to the CCs; perhaps he has some comments.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57115; Package emacs. (Sat, 13 Aug 2022 04:38:02 GMT) Full text and rfc822 format available.

Message #11 received at 57115 <at> debbugs.gnu.org (full text, mbox):

From: Michael Heerdegen <michael_heerdegen <at> web.de>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: Pythonora Nybon <bmsac0001 <at> gmail.com>, 57115 <at> debbugs.gnu.org,
 Stefan Monnier <monnier <at> iro.umontreal.ca>
Subject: Re: bug#57115: emacs 29 ~commandp~ check function ~find-file~ loop
 without termination while ~find-file~ is adviced nested up to 20 level
Date: Sat, 13 Aug 2022 06:37:18 +0200
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> I'm not quite sure what this code snippet is attempting to achieve, but
> it does hang in Emacs 29, and it didn't in Emacs 28.
>
> Adding Stefan to the CCs; perhaps he has some comments.

The `commandp' call is what is hanging (or taking extremely long).  I
guess there is a tree-like recursion of `commandp' and
`oclosure-interactive-form' (recurses on advice--car and
advice--cdr...?) - just guessing.

Michael.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57115; Package emacs. (Sat, 13 Aug 2022 16:07:01 GMT) Full text and rfc822 format available.

Message #14 received at 57115 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: Pythonora Nybon <bmsac0001 <at> gmail.com>, 57115 <at> debbugs.gnu.org
Subject: Re: bug#57115: emacs 29 ~commandp~ check function ~find-file~ loop
 without termination while ~find-file~ is adviced nested up to 20 level
Date: Sat, 13 Aug 2022 12:06:37 -0400
> I'm not quite sure what this code snippet is attempting to achieve, but
> it does hang in Emacs 29, and it didn't in Emacs 28.

It doesn't really hang: in my tests it takes ~1s for 12 pieces of
advice, and 3x slower for every additional advice, so it should finish
in about 2h :-)

Should be fixed on `master` now.


        Stefan





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57115; Package emacs. (Sun, 14 Aug 2022 02:03:01 GMT) Full text and rfc822 format available.

Message #17 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Michael Heerdegen <michael_heerdegen <at> web.de>
To: Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of
 text editors" <bug-gnu-emacs <at> gnu.org>
Cc: Lars Ingebrigtsen <larsi <at> gnus.org>, Pythonora Nybon <bmsac0001 <at> gmail.com>,
 57115 <at> debbugs.gnu.org, Stefan Monnier <monnier <at> iro.umontreal.ca>
Subject: Re: bug#57115: emacs 29 ~commandp~ check function ~find-file~ loop
 without termination while ~find-file~ is adviced nested up to 20 level
Date: Sun, 14 Aug 2022 04:02:14 +0200
Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of
text editors" <bug-gnu-emacs <at> gnu.org> writes:

> Should be fixed on `master` now.

modified   lisp/emacs-lisp/nadvice.el
@@ -167,31 +167,31 @@ advice-eval-interactive-spec

 (defun advice--interactive-form (function)
   "Like `interactive-form' but tries to avoid autoloading functions."
-  (when (commandp function)
-    (if (not (and (symbolp function) (autoloadp (indirect-function function))))
-        (interactive-form function)
-      `(interactive (advice-eval-interactive-spec
+  (if (not (and (symbolp function) (autoloadp (indirect-function function))))
+      (interactive-form function)
+    (when (commandp function)
+      `(interactive (advice--eval-interactive-spec
                            ^^
That function doesn't exist...?

TIA,

Michael.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57115; Package emacs. (Sun, 14 Aug 2022 02:03:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57115; Package emacs. (Sun, 14 Aug 2022 13:21:02 GMT) Full text and rfc822 format available.

Message #23 received at 57115 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: Michael Heerdegen <michael_heerdegen <at> web.de>, 57115 <at> debbugs.gnu.org
Cc: larsi <at> gnus.org, bmsac0001 <at> gmail.com, monnier <at> iro.umontreal.ca
Subject: Re: bug#57115: emacs 29 ~commandp~ check function ~find-file~ loop
 without termination while ~find-file~ is adviced nested up to 20 level
Date: Sun, 14 Aug 2022 06:20:01 -0700
Michael Heerdegen <michael_heerdegen <at> web.de> writes:

> That function doesn't exist...?

This seems to be fixed in commit b93e14fa0f.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57115; Package emacs. (Sun, 14 Aug 2022 22:54:01 GMT) Full text and rfc822 format available.

Message #26 received at 57115 <at> debbugs.gnu.org (full text, mbox):

From: Michael Heerdegen <michael_heerdegen <at> web.de>
To: Stefan Kangas <stefankangas <at> gmail.com>
Cc: larsi <at> gnus.org, bmsac0001 <at> gmail.com, 57115 <at> debbugs.gnu.org,
 monnier <at> iro.umontreal.ca
Subject: Re: bug#57115: emacs 29 ~commandp~ check function ~find-file~ loop
 without termination while ~find-file~ is adviced nested up to 20 level
Date: Mon, 15 Aug 2022 00:53:36 +0200
Stefan Kangas <stefankangas <at> gmail.com> writes:

> > That function doesn't exist...?
>
> This seems to be fixed in commit b93e14fa0f.

Yes, it is indeed, thanks.

Michael.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57115; Package emacs. (Mon, 15 Aug 2022 14:30:02 GMT) Full text and rfc822 format available.

Message #29 received at 57115 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Michael Heerdegen <michael_heerdegen <at> web.de>
Cc: bmsac0001 <at> gmail.com, 57115 <at> debbugs.gnu.org,
 Stefan Kangas <stefankangas <at> gmail.com>, monnier <at> iro.umontreal.ca
Subject: Re: bug#57115: emacs 29 ~commandp~ check function ~find-file~ loop
 without termination while ~find-file~ is adviced nested up to 20 level
Date: Mon, 15 Aug 2022 16:29:00 +0200
Michael Heerdegen <michael_heerdegen <at> web.de> writes:

>> This seems to be fixed in commit b93e14fa0f.
>
> Yes, it is indeed, thanks.

And I can confirm that the original reported problem has gone away, so
I'm closing this bug report.





bug marked as fixed in version 29.1, send any further explanations to 57115 <at> debbugs.gnu.org and Pythonora Nybon <bmsac0001 <at> gmail.com> Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Mon, 15 Aug 2022 14:30:03 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 13 Sep 2022 11:24:05 GMT) Full text and rfc822 format available.

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

Previous Next


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