emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master b49c174010: Fix about:protocols in EWW


From: Po Lu
Subject: master b49c174010: Fix about:protocols in EWW
Date: Thu, 4 Aug 2022 03:53:21 -0400 (EDT)

branch: master
commit b49c1740105dd3715315aa433674c95f44aaeac4
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix about:protocols in EWW
    
    * lisp/net/eww.el (eww--dwim-expand-url): Handle `about: ' URLs.
    (bug#56885)
    * lisp/url/url-about.el (url-about): Return correct content type
    for HTML data.
    * lisp/url/url-http.el (url-http--get-referer): Refrain from
    looking for a referrer if the lastloc had no host.
---
 lisp/net/eww.el       |  3 +++
 lisp/url/url-about.el |  2 +-
 lisp/url/url-http.el  | 48 ++++++++++++++++++++++++++----------------------
 3 files changed, 30 insertions(+), 23 deletions(-)

diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 4dbd5de2ef..beb8e0c45d 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -450,6 +450,9 @@ For more information, see Info node `(eww) Top'."
        ;; Don't mangle file: URLs at all.
         ((string-match-p "\\`ftp://"; url)
          (user-error "FTP is not supported"))
+        ((string-match-p "\\`about:" url)
+         ;; Treat this as an about: url.  (bug#56885)
+         url)
         (t
         ;; Anything that starts with something that vaguely looks
         ;; like a protocol designator is interpreted as a full URL.
diff --git a/lisp/url/url-about.el b/lisp/url/url-about.el
index a50986d511..ee94fde8b4 100644
--- a/lisp/url/url-about.el
+++ b/lisp/url/url-about.el
@@ -93,7 +93,7 @@
     (if (fboundp func)
        (progn
          (set-buffer (generate-new-buffer " *about-data*"))
-         (insert "Content-type: text/plain\n\n")
+         (insert "Content-type: text/html\n\n")
          (funcall func url)
          (current-buffer))
       (error "URL does not know about `%s'" item))))
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index 125f8436f6..e2d28974b6 100644
--- a/lisp/url/url-http.el
+++ b/lisp/url/url-http.el
@@ -237,28 +237,32 @@ request.")
     (if (not (url-p url-current-lastloc))
         (setq url-current-lastloc (url-generic-parse-url url-current-lastloc)))
     (let ((referer (copy-sequence url-current-lastloc)))
-      (setf (url-host referer) (puny-encode-domain (url-host referer)))
-      (let ((referer-string (url-recreate-url referer)))
-        (when (and (not (memq url-privacy-level '(low high paranoid)))
-                   (not (and (listp url-privacy-level)
-                             (memq 'lastloc url-privacy-level))))
-          ;; url-privacy-level allows referer.  But url-lastloc-privacy-level
-          ;; may restrict who we send it to.
-          (cl-case url-lastloc-privacy-level
-            (host-match
-             (let ((referer-host (url-host referer))
-                   (url-host (url-host url)))
-               (when (string= referer-host url-host)
-                 referer-string)))
-            (domain-match
-             (let ((referer-domain (url-domain referer))
-                   (url-domain (url-domain url)))
-               (when (and referer-domain
-                          url-domain
-                          (string= referer-domain url-domain))
-                 referer-string)))
-            (otherwise
-             referer-string)))))))
+      ;; In the case of `url-about', there is actually no host.
+      (if (url-host referer)
+          (progn
+            (setf (url-host referer) (puny-encode-domain (url-host referer)))
+            (let ((referer-string (url-recreate-url referer)))
+              (when (and (not (memq url-privacy-level '(low high paranoid)))
+                         (not (and (listp url-privacy-level)
+                                   (memq 'lastloc url-privacy-level))))
+                ;; url-privacy-level allows referer.  But 
url-lastloc-privacy-level
+                ;; may restrict who we send it to.
+                (cl-case url-lastloc-privacy-level
+                  (host-match
+                   (let ((referer-host (url-host referer))
+                         (url-host (url-host url)))
+                     (when (string= referer-host url-host)
+                       referer-string)))
+                  (domain-match
+                   (let ((referer-domain (url-domain referer))
+                         (url-domain (url-domain url)))
+                     (when (and referer-domain
+                                url-domain
+                                (string= referer-domain url-domain))
+                       referer-string)))
+                  (otherwise
+                   referer-string)))))
+        nil))))
 
 ;; Building an HTTP request
 (defun url-http-user-agent-string ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]