aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/gnus
diff options
context:
space:
mode:
authorŠtěpán Němec2020-03-07 18:26:44 +0100
committerŠtěpán Němec2020-04-13 12:12:00 +0200
commit188bd80a903d34ef6a85b09e99890433e7adceb7 (patch)
treef8f32f801fcf61e0a4464bee9319c1ecc78e8943 /lisp/gnus
parentc395ebaf2142b4a142262353f730fb7b1fcea710 (diff)
downloademacs-188bd80a903d34ef6a85b09e99890433e7adceb7.tar.gz
emacs-188bd80a903d34ef6a85b09e99890433e7adceb7.zip
gnus-shorten-url: Improve and avoid args-out-of-range error
'gnus-shorten-url' (used by 'gnus-summary-browse-url') ignored fragment identifiers and didn't check substring bounds, in some cases leading to runtime errors, e.g.: (gnus-shorten-url "https://some.url.with/path/and#also_a_long_target" 40) ;; => Lisp error: (args-out-of-range "/path/and" -18 nil) This commit makes it account for #fragments and fixes faulty string computation, reusing existing helper function. (bug#39980) * lisp/vc/ediff-init.el (ediff-truncate-string-left): Rename to 'string-truncate-left' and move... * lisp/emacs-lisp/subr-x.el (string-truncate-left): ...here. All callers changed. * lisp/gnus/gnus-sum.el (gnus-shorten-url): Fix args-out-of-range error, don't drop #fragments, use 'string-truncate-left'.
Diffstat (limited to 'lisp/gnus')
-rw-r--r--lisp/gnus/gnus-sum.el14
1 files changed, 7 insertions, 7 deletions
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index a47e6576230..6f367692ddd 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -9494,15 +9494,15 @@ The 1st element is the button named by `gnus-collect-urls-primary-text'."
9494 (delete-dups urls))) 9494 (delete-dups urls)))
9495 9495
9496(defun gnus-shorten-url (url max) 9496(defun gnus-shorten-url (url max)
9497 "Return an excerpt from URL." 9497 "Return an excerpt from URL not exceeding MAX characters."
9498 (if (<= (length url) max) 9498 (if (<= (length url) max)
9499 url 9499 url
9500 (let ((parsed (url-generic-parse-url url))) 9500 (let* ((parsed (url-generic-parse-url url))
9501 (concat (url-host parsed) 9501 (host (url-host parsed))
9502 "..." 9502 (rest (concat (url-filename parsed)
9503 (substring (url-filename parsed) 9503 (when-let ((target (url-target parsed)))
9504 (- (length (url-filename parsed)) 9504 (concat "#" target)))))
9505 (max (- max (length (url-host parsed))) 0))))))) 9505 (concat host (string-truncate-left rest (- max (length host)))))))
9506 9506
9507(defun gnus-summary-browse-url (&optional external) 9507(defun gnus-summary-browse-url (&optional external)
9508 "Scan the current article body for links, and offer to browse them. 9508 "Scan the current article body for links, and offer to browse them.