Subject: bug#71270: 30.0.50; Execute dired-do-shell-command will encounter 'wrong-type-argument stringp nil' error

From: Yuwei Tian <[email-masked]>
Date: Thu, 30 May 2024 14:24:35 +0800

After commit 74f15ad72d937b309dafecba872bccd1a880181e, it will
encounter 'wrong-type-argument string nil' error when executing
dired-do-shell-command.

Here is the backtrace:

  string-match("/" nil 0)
  split-string(nil "/")
  xdg-mime-apps(nil)
  shell-command-guess-xdg(nil ("xxxxxxx"))

The shell-command-guess-xdg is being called in the chain of
shell-command-guess-functions. Here is the definition of
shell-command-guess-xdg function:

(defun shell-command-guess-xdg (commands files)
  "Populate COMMANDS by XDG configuration for FILES."
  (require 'xdg)
  (let* ((xdg-mime (when (executable-find "xdg-mime")
                     (string-trim-right
                      (shell-command-to-string
                       (concat "xdg-mime query filetype "
                               (shell-quote-argument (car files)))))))
         (xdg-mime-apps (unless (string-empty-p xdg-mime)
                          (xdg-mime-apps xdg-mime)))
         (xdg-commands
          (mapcar (lambda (desktop)
                    (setq desktop (xdg-desktop-read-file desktop))
                    (propertize
                     (replace-regexp-in-string
                      " .*" "" (gethash "Exec" desktop))
                     'name (gethash "Name" desktop)))
                  xdg-mime-apps)))
    (append xdg-commands commands)))

xdg-mime will be nil if xdg-mime not found, string-empty-p returns
nil and xdg-mime-apps will be called with nil.

In GNU Emacs 30.0.50 (build 1, x86_64-apple-darwin23.5.0, NS
appkit-2487.60 Version 14.5 (Build 23F79)) of 2024-05-30 built on
fishtai0-mac.local
Windowing system distributor 'Apple', version 10.3.2487
System Description:  macOS 14.5

Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=/usr/local/share/emacs/site-lisp
--infodir=/usr/local/Cellar/emacs-plus@30/30.0.50/share/info/emacs
--prefix=/usr/local/Cellar/emacs-plus@30/30.0.50 --with-xml2
--with-gnutls --without-compress-install --without-dbus
--without-imagemagick --with-modules --with-rsvg --with-webp --with-ns
--disable-ns-self-contained 'CFLAGS=-Os -w -pipe -march=westmere
-mmacosx-version-min=14
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk
-DFD_SETSIZE=10000 -DDARWIN_UNLIMITED_SELECT'
'CPPFLAGS=-I/usr/local/opt/icu4c/include
-I/usr/local/opt/sqlite/include -I/usr/local/opt/readline/include
-F/usr/local/Frameworks
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk'
'LDFLAGS=-L/usr/local/opt/icu4c/lib -L/usr/local/opt/sqlite/lib
-L/usr/local/opt/readline/lib -L/usr/local/lib -F/usr/local/Frameworks
-Wl,-headerpad_max_install_names
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk''

Configured features:
ACL GIF GLIB GMP GNUTLS JPEG LCMS2 LIBXML2 MODULES NOTIFY KQUEUE NS
PDUMPER PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
WEBP XIM ZLIB

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

Major mode: Debugger

Minor modes in effect:
  winner-mode: t
  recentf-mode: t
  delete-selection-mode: t
  auto-image-file-mode: t
  server-mode: t
  savehist-mode: t
  global-so-long-mode: t
  desktop-save-mode: t
  which-key-mode: t
  eldoc-in-minibuffer-mode: t
  global-subword-mode: t
  subword-mode: t
  lisp-extra-font-lock-global-mode: t
  auto-compile-on-load-mode: t
  auto-compile-on-save-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  global-auto-revert-mode: t
  save-place-mode: t
  global-hl-line-mode: t
  global-hl-todo-mode: t
  electric-pair-mode: t
  windmove-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  auto-save-visited-mode: t

Load-path shadows:
...

Features:
(... emacs)

Memory information:
((conses 16 705553 1556771) (symbols 48 73143 53) (strings 32 201452 108982)
(string-bytes 1 5941470) (vectors 16 82573) (vector-slots 8 880792 726985)
(floats 8 835 1609) (intervals 56 5527 1489) (buffers 992 20))