Subject: 27.1; [PATCH] ffap-gopher-at-point infinite loop

From: [email-masked]
Date: Sat, 17 Oct 2020 17:23:38 -0400

emacs -Q --batch -l ffap --eval "(with-temp-buffer (save-excursion (insert
\"type=\")) (ffap-guess-file-name-at-point))"

>From 3fb3caa6a8633a4e36a3af094bce0b07c3e9aac1 Mon Sep 17 00:00:00 2001
From: dickmao <none>
Date: Sat, 17 Oct 2020 17:19:04 -0400
Subject: [PATCH] `ffap-gopher-at-point` interminable without newlines

* lisp/ffap.el (ffap-gopher-at-point): Check for eobp.
* test/lisp/ffap-tests.el (ffap-test-no-newlines): Ensure termination for
corner case.
---
 lisp/ffap.el            | 3 ++-
 test/lisp/ffap-tests.el | 6 ++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/lisp/ffap.el b/lisp/ffap.el
index ccba291144..2c1d3d5bd9 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -1383,7 +1383,8 @@ ffap-gopher-at-point
                          (point)))
              (bookmark (cl-loop for keyval = (ffap--gopher-var-on-line)
                                 while keyval collect keyval
-                                do (forward-line 1))))
+                                do (forward-line 1)
+                                until (eobp))))
         (when bookmark
           (setq ffap-string-at-point-region (list beg (point)))
           (let-alist (nconc bookmark '((type . "1") (port . "70")))
diff --git a/test/lisp/ffap-tests.el b/test/lisp/ffap-tests.el
index e8c12669c1..ca8c10831f 100644
--- a/test/lisp/ffap-tests.el
+++ b/test/lisp/ffap-tests.el
@@ -117,6 +117,12 @@ ffap-test-with-spaces
      t "C:\\temp\\program.log on Windows or /var/log/program.log on Unix.")
     "\\temp\\program.log")))
 
+(ert-deftest ffap-test-no-newlines ()
+  (should-not
+   (with-temp-buffer
+     (save-excursion (insert "type="))
+     (ffap-guess-file-name-at-point))))
+
 (provide 'ffap-tests)
 
 ;;; ffap-tests.el ends here
-- 
2.26.2

In GNU Emacs 27.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.22.30)
 of 2020-09-20 built on dick
Repository revision: dff02e85245dfbbeea7d57dc1a753a9ba24616d5
Repository branch: gnus-dev-27
Windowing system distributor 'The X.Org Foundation', version 11.0.11906000
System Description: Ubuntu 18.04.4 LTS

Recent messages:
20201017T172001.512> nnhackernews-request-group: 211 22898 1 22898 news
20201017T172001.513> Fetching headers for nnhackernews:news...
20201017T172002.226> Fetching headers for nnhackernews:news...done
20201017T172002.248> Scoring...
20201017T172002.303> Scoring...done
20201017T172002.311> Generating summary...
20201017T172002.628> Generating summary...done
20201017T172002.629> Processing kill file /home/dick/News/nnhackernews:news.KILL...
20201017T172002.664> Processing kill file /home/dick/News/nnhackernews:news.KILL...done
20201017T172002.682> Retrieving newsgroup: nnhackernews:news...done

Configured using:
 'configure --prefix=/home/dick/.local --with-rsvg=yes --with-xml2=yes
 PKG_CONFIG_PATH=/home/dick/.local/lib/pkgconfig'
Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND DBUS GSETTINGS GLIB NOTIFY INOTIFY LIBSELINUX
GNUTLS LIBXML2 FREETYPE HARFBUZZ XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE
XIM MODULES THREADS JSON PDUMPER GMP
Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Group

Minor modes in effect:
  nntwitter-group-mode: t
  nnreddit-group-mode: t
  gnus-topic-mode: t
  gnus-undo-mode: t
  show-paren-mode: t
  global-magit-file-mode: t
  magit-auto-revert-mode: t
  global-git-commit-mode: t
  async-bytecomp-package-mode: t
  flx-ido-mode: t
  projectile-mode: t
  ido-everywhere: t
  override-global-mode: t
  shell-dirtrack-mode: t
  beacon-mode: t
  global-hl-line-mode: t
  winner-mode: t
  cl-old-struct-compat-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/home/dick/ESS/lisp/obsolete/ess-swv hides /home/dick/ESS/lisp/ess-swv
/home/dick/ESS/lisp/obsolete/ess-rutils hides /home/dick/ESS/lisp/ess-rutils
/home/dick/ESS/lisp/obsolete/ess-noweb hides /home/dick/ESS/lisp/ess-noweb
/home/dick/ESS/lisp/obsolete/mouseme hides /home/dick/ESS/lisp/mouseme
/home/dick/ESS/lisp/obsolete/ess-mouse hides /home/dick/ESS/lisp/ess-mouse
/home/dick/ESS/lisp/obsolete/ess-noweb-mode hides /home/dick/ESS/lisp/ess-noweb-mode
/home/dick/ESS/lisp/obsolete/make-regexp hides /home/dick/ESS/lisp/make-regexp
/home/dick/ESS/lisp/obsolete/ess-r-a hides /home/dick/ESS/lisp/ess-r-a
/home/dick/ESS/lisp/obsolete/ess-noweb-font-lock-mode hides /home/dick/ESS/lisp/ess-noweb-font-lock-mode
/home/dick/gomacro-mode/gomacro-mode hides /home/dick/.emacs.d/elpa/gomacro-mode-20200326.1103/gomacro-mode
/home/dick/ESS/lisp/julia-mode-latexsubs hides /home/dick/.emacs.d/elpa/julia-mode-20200717.1915/julia-mode-latexsubs
/home/dick/ESS/lisp/julia-mode hides /home/dick/.emacs.d/elpa/julia-mode-20200717.1915/julia-mode
/home/dick/.emacs.d/elpa/hydra-20170924.2259/lv hides /home/dick/.emacs.d/elpa/lv-20191106.1238/lv
/home/dick/melpa-stats/melpa-stats hides /home/dick/.emacs.d/elpa/melpa-stats-20190720.1833/melpa-stats
/home/dick/.emacs.d/elpa/async-20200113.1745/async-autoloads hides /home/dick/.local/share/emacs/site-lisp/emacs-async/async-autoloads
/home/dick/.emacs.d/elpa/async-20200113.1745/async-bytecomp hides /home/dick/.local/share/emacs/site-lisp/emacs-async/async-bytecomp
/home/dick/.emacs.d/elpa/async-20200113.1745/smtpmail-async hides /home/dick/.local/share/emacs/site-lisp/emacs-async/smtpmail-async
/home/dick/.emacs.d/elpa/async-20200113.1745/dired-async hides /home/dick/.local/share/emacs/site-lisp/emacs-async/dired-async
/home/dick/.emacs.d/elpa/async-20200113.1745/async hides /home/dick/.local/share/emacs/site-lisp/emacs-async/async
/home/dick/.emacs.d/elpa/async-20200113.1745/async-pkg hides /home/dick/.local/share/emacs/site-lisp/emacs-async/async-pkg
/home/dick/.emacs.d/lisp/json hides /home/dick/.local/share/emacs/27.1/lisp/json
/home/dick/.emacs.d/elpa/map-2.1/map hides /home/dick/.local/share/emacs/27.1/lisp/emacs-lisp/map

Features:
(shadow emacsbug eieio-opt speedbar sb-image ezimage dframe help-fns
radix-tree cl-print debug backtrace find-func misearch multi-isearch supercite
regi canlock bbdb-message sendmail flyspell ispell footnote gravatar jka-compr
shr-color color eww flow-fill url-queue mule-util sort smiley mail-extr qp
gnus-notifications gnus-fun notifications dbus gnus-kill gnus-async gnus-dup
gnus-ml disp-table utf-7 mm-archive network-stream url-cache nnrss nndiscourse
rbenv nnhackernews nntwitter nntwitter-api nnreddit gnus-topic url-http
url-auth url-gw nsm request virtualenvwrapper gud s mm-url json-rpc python
tramp-sh tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat
ls-lisp gnus-bcklg gnus-cite nnfolder bbdb-gnus nnnil nnir gnus-demon nnmairix
nnml bbdb-mua bbdb-com bbdb bbdb-site timezone gnus-delay gnus-draft
gnus-agent gnus-srvr gnus-score score-mode nnvirtual nntp gnus-cache gnus-msg
gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum shr svg dom
nndraft nnmh gnus-group gnus-undo use-package use-package-delight
use-package-diminish gnus-start gnus-cloud nnimap nnmail mail-source utf7
netrc nnoo parse-time iso8601 gnus-spec gnus-int gnus-range gnus-win
paredit-ext paredit dired-x inf-ruby ruby-mode smie melpa-stats ht
dash-functional anaphora a pp sx key-combo company haskell-interactive-mode
haskell-presentation-mode haskell-process haskell-session haskell-compile
haskell-mode haskell-cabal haskell-utils haskell-font-lock haskell-indentation
haskell-string haskell-sort-imports haskell-lexeme rx haskell-align-imports
haskell-complete-module haskell-ghc-support etags fileloop generator dabbrev
haskell-customize hydra lv use-package-ensure paren magit-patch-changelog
magit-patch magit-submodule magit-obsolete magit-popup magit-blame magit-stash
magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone
magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit
magit-repos magit-apply magit-wip magit-log which-func imenu magit-diff
smerge-mode diff diff-mode magit-core magit-autorevert autorevert filenotify
magit-margin magit-transient magit-process magit-mode git-commit transient
magit-git magit-section magit-utils crm log-edit message rmc dired
dired-loaddefs rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader pcvs-util add-log with-editor
async-bytecomp async pcase server dash flx-ido flx solarized-theme
solarized-definitions projectile ibuf-ext ibuffer ibuffer-loaddefs grep gnus
nnheader gnus-util rmail rmail-loaddefs rfc2047 rfc2045 ietf-drums
text-property-search time-date mail-utils mm-util mail-prsvr
google-translate-default-ui google-translate-core-ui ido google-translate-core
google-translate-tk google-translate-backend use-package-bind-key bind-key
auto-complete popup cus-edit cus-start cus-load wid-edit ess-r-mode
ess-r-flymake flymake-proc flymake warnings thingatpt ess-r-xref xref ess-trns
ess-r-package shell pcomplete ess-r-completion ess-roxy ess-r-syntax ess-rd
noutline outline easy-mmode hideshow ess-s-lang ess-help ess-mode ess-inf
project format-spec ess-tracebug ess ess-utils ess-custom compile comint
ansi-color emms-player-mplayer emms-player-simple emms emms-compat
twittering-mode epa derived epg epg-config tls gnutls puny url url-proxy
url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util
mailcap advice xml cl fzf cl-extra help-mode use-package-core beacon hl-line
winner ring finder-inf howdoyou-autoloads json-reformat-autoloads
json-snatcher-autoloads edmacro kmacro sml-mode-autoloads
tornado-template-mode-autoloads info package easymenu browse-url url-handlers
url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
password-cache json subr-x map url-vars seq byte-opt gv bytecomp byte-compile
cconv cl-loaddefs cl-lib tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type 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
elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu
font-core term/tty-colors frame minibuffer cl-generic 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 charscript charprop case-table epa-hook jka-cmpr-hook help
simple abbrev obarray cl-preloaded nadvice loaddefs button faces cus-face
macroexp files text-properties overlay sha1 md5 base64 format env code-pages
mule custom widget hashtable-print-readable backquote threads dbusbind inotify
dynamic-setting system-font-setting font-render-setting move-toolbar gtk
x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 2543991 286262)
 (symbols 48 45425 414)
 (strings 32 396958 83666)
 (string-bytes 1 22047944)
 (vectors 16 81124)
 (vector-slots 8 2636593 288038)
 (floats 8 3674 5680)
 (intervals 56 246857 19916)
 (buffers 1000 273))