diff options
author | Štěpán Němec <stepnem@gmail.com> | 2020-03-07 18:26:44 +0100 |
---|---|---|
committer | Štěpán Němec <stepnem@gmail.com> | 2020-04-13 12:12:00 +0200 |
commit | 188bd80a903d34ef6a85b09e99890433e7adceb7 (patch) | |
tree | f8f32f801fcf61e0a4464bee9319c1ecc78e8943 /lisp/gnus/gnus-sum.el | |
parent | c395ebaf2142b4a142262353f730fb7b1fcea710 (diff) | |
download | emacs-188bd80a903d34ef6a85b09e99890433e7adceb7.tar.gz emacs-188bd80a903d34ef6a85b09e99890433e7adceb7.tar.bz2 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/gnus-sum.el')
-rw-r--r-- | lisp/gnus/gnus-sum.el | 14 |
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'." (delete-dups urls))) (defun gnus-shorten-url (url max) - "Return an excerpt from URL." + "Return an excerpt from URL not exceeding MAX characters." (if (<= (length url) max) url - (let ((parsed (url-generic-parse-url url))) - (concat (url-host parsed) - "..." - (substring (url-filename parsed) - (- (length (url-filename parsed)) - (max (- max (length (url-host parsed))) 0))))))) + (let* ((parsed (url-generic-parse-url url)) + (host (url-host parsed)) + (rest (concat (url-filename parsed) + (when-let ((target (url-target parsed))) + (concat "#" target))))) + (concat host (string-truncate-left rest (- max (length host))))))) (defun gnus-summary-browse-url (&optional external) "Scan the current article body for links, and offer to browse them. |