From ad56e18b1f3ec045f32d44f558c13ae44d94cca6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Micha=C3=ABl=20Cadilhac?= Date: Wed, 12 Sep 2007 11:48:34 +0000 Subject: [PATCH] (browse-url-encode-url): Fix an infinite loop. New argument `filename-p' to use one set of confusing chars or another. (browse-url-file-url): Use the argument. Suggested by Johannes Weiner. --- lisp/ChangeLog | 7 +++++++ lisp/net/browse-url.el | 19 +++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f1cfd7a03ea..c53e17cce31 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2007-09-12 Micha,Ak(Bl Cadilhac + + * lisp/net/browse-url.el (browse-url-encode-url): Fix an infinite loop. + New argument `filename-p' to use one set of confusing chars or another. + (browse-url-file-url): Use the argument. + Suggested by Johannes Weiner. + 2007-09-12 Romain Francoise * cus-start.el (all): Revert 2007-09-08 change. diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el index d152f202561..936ca2d4222 100644 --- a/lisp/net/browse-url.el +++ b/lisp/net/browse-url.el @@ -619,16 +619,19 @@ down (this *won't* always work)." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; URL encoding -(defun browse-url-encode-url (url) - "Encode all `confusing' characters in URL." - (let ((encoded-url (copy-sequence url))) - (while (string-match "%" encoded-url) - (setq encoded-url (replace-match "%25" t t encoded-url))) - (while (string-match "[*\"()',=;? ]" encoded-url) +(defun browse-url-encode-url (url &optional filename-p) + "Encode all `confusing' characters in URL. +If FILENAME-P is nil, the confusing characters are [,)$]. +Otherwise, the confusing characters are [*\"()',=;?% ]." + (let ((conf-char (if filename-p "[*\"()',=;?% ]" "[,)$]")) + (encoded-url (copy-sequence url)) + (s 0)) + (while (setq s (string-match conf-char encoded-url s)) (setq encoded-url (replace-match (format "%%%x" (string-to-char (match-string 0 encoded-url))) - t t encoded-url))) + t t encoded-url) + s (1+ s))) encoded-url)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -703,7 +706,7 @@ Use variable `browse-url-filename-alist' to map filenames to URLs." (or file-name-coding-system default-file-name-coding-system)))) (if coding (setq file (encode-coding-string file coding)))) - (setq file (browse-url-encode-url file)) + (setq file (browse-url-encode-url file 'url-is-filename)) (dolist (map browse-url-filename-alist) (when (and map (string-match (car map) file)) (setq file (replace-match (cdr map) t nil file)))) -- 2.39.5