Subject: bug#72128: closed (Re: bug#72128: 31.0.50; [PATCH] Remove `smtpmail-address-buffer')

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 11 Feb 2025 19:33:03 +0000

Your bug report

#72128: 31.0.50; [PATCH] Remove `smtpmail-address-buffer'

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
72128: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=72128
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#72128: 31.0.50; [PATCH] Remove `smtpmail-address-buffer'
From: Stefan Kangas <[email-masked]>
To: Manuel Giraud <[email-masked]>
Cc: [email-masked]
Date: Tue, 11 Feb 2025 11:32:05 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

Version: 31.1

Manuel Giraud <[email-masked]> writes:

> I was reading "smtpmail.el".  Here is a simple patch that should not
> change the functionality but, I think, is more idiomatic.

I think you're right, but I moved the with-temp-buffer call into the
function itself, which made the patch shorter.  Installed on master as
commit e2991272f28, and closing.

Subject: 31.0.50; [PATCH] Remove `smtpmail-address-buffer'
From: Manuel Giraud <[email-masked]>
To: [email-masked]
Date: Mon, 15 Jul 2024 20:50:27 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi
Hi,

I was reading "smtpmail.el".  Here is a simple patch that should not
change the functionality but, I think, is more idiomatic.

>From 093080f1483f6ab7473a2281a589f80f03573ecf Mon Sep 17 00:00:00 2001
From: Manuel Giraud <[email-masked]>
Date: Mon, 15 Jul 2024 17:33:21 +0200
Subject: [PATCH] Remove `smtpmail-address-buffer' temporary buffer

* lisp/mail/smtpmail.el (smtpmail-address-buffer): Remove var.
(smtpmail-send-it): Replace `smtpmail-address-buffer' with a
temporary buffer.
(smtpmail-deduce-address-list): Do not use
`smtpmail-address-buffer' anymore and
`smtpmail-recipient-address-list' is set by caller.
---
 lisp/mail/smtpmail.el | 97 +++++++++++++++++++++----------------------
 1 file changed, 47 insertions(+), 50 deletions(-)

diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el
index 98083c0489a..b3000194132 100644
--- a/lisp/mail/smtpmail.el
+++ b/lisp/mail/smtpmail.el
@@ -182,7 +182,6 @@ smtpmail-store-queue-variables
 
 ;;; Variables
 
-(defvar smtpmail-address-buffer)
 (defvar smtpmail-recipient-address-list nil)
 (defvar smtpmail--stored-queue-variables
   '(smtpmail-smtp-server
@@ -357,11 +356,10 @@ smtpmail-send-it
 		  (erase-buffer))))
 	  ;; Encode the header according to RFC2047.
 	  (mail-encode-header (point-min) delimline)
-	  ;;
-	  (setq smtpmail-address-buffer (generate-new-buffer "*smtp-mail*"))
-	  (setq smtpmail-recipient-address-list
-                (smtpmail-deduce-address-list tembuf (point-min) delimline))
-	  (kill-buffer smtpmail-address-buffer)
+	  ;; Get recipients' adresses
+          (with-temp-buffer
+            (setq smtpmail-recipient-address-list
+                  (smtpmail-deduce-address-list tembuf (point-min) delimline)))
 
 	  (smtpmail-do-bcc delimline)
           ;; Send or queue
@@ -1068,51 +1066,50 @@ smtpmail-send-data
 
 (defun smtpmail-deduce-address-list (smtpmail-text-buffer header-start header-end)
   "Get address list suitable for smtp RCPT TO: <address>."
-  (with-current-buffer smtpmail-address-buffer
+  ;; Called into a temporary buffer.
+  (let ((case-fold-search t)
+        (simple-address-list "")
+        this-line
+        this-line-end
+        addr-regexp)
+    (insert-buffer-substring smtpmail-text-buffer header-start header-end)
+    (goto-char (point-min))
+    ;; RESENT-* fields should stop processing of regular fields.
+    (save-excursion
+      (setq addr-regexp
+	    (if (re-search-forward "^Resent-\\(To\\|Cc\\|Bcc\\):"
+				   header-end t)
+		"^Resent-\\(To\\|Cc\\|Bcc\\):"
+	      "^\\(To:\\|Cc:\\|Bcc:\\)")))
+
+    (while (re-search-forward addr-regexp header-end t)
+      (replace-match "")
+      (setq this-line (match-beginning 0))
+      (forward-line 1)
+      ;; get any continuation lines
+      (while (and (looking-at "^[ \t]+") (< (point) header-end))
+	(forward-line 1))
+      (setq this-line-end (point-marker))
+      (setq simple-address-list
+	    (concat simple-address-list " "
+		    (mail-strip-quoted-names (buffer-substring this-line this-line-end)))))
     (erase-buffer)
-    (let ((case-fold-search t)
-          (simple-address-list "")
-          this-line
-          this-line-end
-          addr-regexp)
-      (insert-buffer-substring smtpmail-text-buffer header-start header-end)
-      (goto-char (point-min))
-      ;; RESENT-* fields should stop processing of regular fields.
-      (save-excursion
-	(setq addr-regexp
-	      (if (re-search-forward "^Resent-\\(To\\|Cc\\|Bcc\\):"
-				     header-end t)
-		  "^Resent-\\(To\\|Cc\\|Bcc\\):"
-		"^\\(To:\\|Cc:\\|Bcc:\\)")))
-
-      (while (re-search-forward addr-regexp header-end t)
-	(replace-match "")
-	(setq this-line (match-beginning 0))
-	(forward-line 1)
-	;; get any continuation lines
-	(while (and (looking-at "^[ \t]+") (< (point) header-end))
-	  (forward-line 1))
-	(setq this-line-end (point-marker))
-	(setq simple-address-list
-	      (concat simple-address-list " "
-		      (mail-strip-quoted-names (buffer-substring this-line this-line-end)))))
-      (erase-buffer)
-      (insert " " simple-address-list "\n")
-      (subst-char-in-region (point-min) (point-max) 10 ?  t) ; newline --> blank
-      (subst-char-in-region (point-min) (point-max) ?, ?  t) ; comma   --> blank
-      (subst-char-in-region (point-min) (point-max)  9 ?  t) ; tab     --> blank
-
-      (goto-char (point-min))
-      ;; tidiness in case hook is not robust when it looks at this
-      (while (re-search-forward "[ \t]+" header-end t) (replace-match " "))
-
-      (goto-char (point-min))
-      (let (recipient-address-list)
-	(while (re-search-forward " \\([^ ]+\\) " (point-max) t)
-	  (backward-char 1)
-	  (setq recipient-address-list (cons (buffer-substring (match-beginning 1) (match-end 1))
-					     recipient-address-list)))
-	(setq smtpmail-recipient-address-list recipient-address-list)))))
+    (insert " " simple-address-list "\n")
+    (subst-char-in-region (point-min) (point-max) 10 ?  t) ; newline --> blank
+    (subst-char-in-region (point-min) (point-max) ?, ?  t) ; comma   --> blank
+    (subst-char-in-region (point-min) (point-max)  9 ?  t) ; tab     --> blank
+
+    (goto-char (point-min))
+    ;; tidiness in case hook is not robust when it looks at this
+    (while (re-search-forward "[ \t]+" header-end t) (replace-match " "))
+
+    (goto-char (point-min))
+    (let (recipient-address-list)
+      (while (re-search-forward " \\([^ ]+\\) " (point-max) t)
+	(backward-char 1)
+	(setq recipient-address-list (cons (buffer-substring (match-beginning 1) (match-end 1))
+					   recipient-address-list)))
+      recipient-address-list)))
 
 (defun smtpmail-do-bcc (header-end)
   "Delete [Resent-]Bcc: and their continuation lines from the header area.
-- 
2.45.2

In GNU Emacs 31.0.50 (build 18, x86_64-unknown-openbsd7.5) of 2024-07-15
 built on computer
Repository revision: 093080f1483f6ab7473a2281a589f80f03573ecf
Repository branch: mgi/temp-buffer
Windowing system distributor 'The X.Org Foundation', version 11.0.12101013
System Description: OpenBSD computer 7.5 GENERIC.MP#174 amd64

Configured using:
 'configure CC=egcc CPPFLAGS=-I/usr/local/include
 LDFLAGS=-L/usr/local/lib MAKEINFO=gmakeinfo --prefix=/home/manuel/emacs
 --bindir=/home/manuel/bin --with-x-toolkit=no --without-cairo
 --without-compress-install'

Configured features:
DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG LCMS2 LIBOTF
LIBXML2 MODULES NOTIFY KQUEUE OLDXMENU PDUMPER PNG RSVG SQLITE3 THREADS
TIFF TREE_SITTER WEBP X11 XDBE XFT XIM XINPUT2 XPM ZLIB

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

Major mode: Dired by name

Minor modes in effect:
  gnus-dired-mode: t
  display-time-mode: t
  display-battery-mode: t
  desktop-save-mode: t
  server-mode: t
  electric-pair-mode: t
  override-global-mode: t
  repeat-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: 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:
/home/manuel/.emacs.d/elpa/ef-themes-1.7.0/theme-loaddefs hides /home/manuel/emacs/share/emacs/31.0.50/lisp/theme-loaddefs

Features:
(shadow dabbrev emacsbug smerge-mode diff pcmpl-git vc-hg vc-bzr vc-src
vc-sccs vc-svn pulse tabify imenu man vc-annotate whitespace cl-print
help-fns radix-tree misearch multi-isearch flow-fill shr-color
gnus-async gnus-bcklg qp gnus-ml smtpmail textsec uni-scripts
idna-mapping ucs-normalize uni-confusable textsec-check sort mailalias
gnus-cite mail-extr gnus-topic mm-archive url-cache utf-7 imap rfc2104
nndoc nndraft nnmh network-stream nnfolder nnml gnus-agent gnus-srvr
gnus-score score-mode nnvirtual nntp gnus-cache nnrss vc-cvs vc-rcs
log-view pcvs-util org-indent org-agenda flymake-cc flymake warnings
oc-basic org-element org-persist org-id org-element-ast inline avl-tree
ol-eww eww url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus
nnselect ol-docview doc-view filenotify jka-compr image-mode exif
ol-bibtex bibtex ol-bbdb ol-w3m ol-doi org-link-doi gnus-icalendar
org-capture org-refile org ob ob-tangle ob-ref ob-lob ob-table ob-exp
org-macro org-src sh-script smie treesit executable ob-comint
org-pcomplete org-list org-footnote org-faces org-entities org-version
ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
org-fold-core org-keys oc org-loaddefs org-compat org-macs texinfo
texinfo-loaddefs mule-util on-screen vc-dir ewoc vc make-mode gnus-dired
vc-git diff-mode track-changes vc-dispatcher bug-reference time battery
cus-load desktop frameset exwm-randr xcb-randr exwm-config ido exwm
exwm-input xcb-keysyms xcb-xkb exwm-manage exwm-floating xcb-cursor
xcb-render exwm-layout exwm-workspace exwm-core xcb-ewmh xcb-icccm xcb
xcb-xproto xcb-types xcb-debug server ef-kassio-theme ef-themes
modus-operandi-theme modus-themes zone speed-type url-http url-auth
url-gw nsm ytdious mpdired transmission color calc-bin calc-ext calc
calc-loaddefs rect calc-macs supercite regi ebdb-gnus gnus-msg gnus-art
mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum shr pixel-fill
kinsoku url-file svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus
xml gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int
gnus-range gnus-win ebdb-message message sendmail yank-media puny rfc822
mml mml-sec epa epg rfc6068 epg-config mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 ietf-drums gmm-utils mailheader
ebdb-mua ebdb-com crm ebdb-format ebdb mailabbrev eieio-opt speedbar
ezimage dframe find-func eieio-base timezone icalendar gnus nnheader
gnus-util mail-utils range mm-util mail-prsvr wid-edit web-mode derived
disp-table erlang-start skeleton cc-mode cc-fonts cc-guess cc-menus
cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs slime-asdf grep
slime-tramp tramp rx trampver tramp-integration files-x tramp-message
tramp-compat xdg shell pcomplete parse-time iso8601 time-date
format-spec tramp-loaddefs slime-fancy slime-indentation slime-cl-indent
cl-indent slime-trace-dialog slime-fontifying-fu slime-package-fu
slime-references slime-compiler-notes-tree advice slime-scratch
slime-presentations bridge slime-macrostep macrostep compat
slime-mdot-fu slime-enclosing-context slime-fuzzy slime-fancy-trace
slime-fancy-inspector slime-c-p-c slime-editing-commands slime-autodoc
slime-repl slime-parse slime apropos compile text-property-search etags
fileloop generator xref project arc-mode archive-mode noutline outline
pp comint ansi-osc ansi-color ring hyperspec thingatpt elec-pair edmacro
kmacro use-package-bind-key bind-key appt diary-lib diary-loaddefs
cal-menu calendar cal-loaddefs pcase dired-x dired-aux dired
dired-loaddefs use-package-core repeat easy-mmode calfw-autoloads
calfw-cal-autoloads calfw-org-autoloads debbugs-autoloads ebdb-autoloads
cl-extra help-mode ef-themes-autoloads exwm-autoloads
hyperbole-autoloads kotl-autoloads hact set hhist on-screen-autoloads
osm-autoloads rust-mode-autoloads info slime-autoloads
macrostep-autoloads speed-type-autoloads transmission-autoloads
xelb-autoloads ytdious-autoloads package browse-url url url-proxy
url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs icons password-cache json
subr-x map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib
rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win
term/common-win x-dnd touch-screen 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 theme-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 kqueue lcms2 dynamic-setting system-font-setting
font-render-setting xinput2 x multi-tty move-toolbar
make-network-process emacs)

Memory information:
((conses 16 1048160 412645) (symbols 48 56163 25)
 (strings 32 275019 15389) (string-bytes 1 8635244)
 (vectors 16 179701) (vector-slots 8 2505106 82515)
 (floats 8 700 3959) (intervals 56 19876 4088) (buffers 992 116))

-- 
Manuel Giraud