From mboxrd@z Thu Jan 1 00:00:00 1970 From: Geert Kloosterman Subject: Bug: org-make-link-string incorrect with URL containing escapes [6.34a] Date: Fri, 15 Jan 2010 14:41:03 +0100 Message-ID: <1263562863.5459.129.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-z+rAJhkOVhUJPxYSn9py" Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NVmRd-0006cl-1L for emacs-orgmode@gnu.org; Fri, 15 Jan 2010 08:42:33 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NVmRb-0006au-Bh for emacs-orgmode@gnu.org; Fri, 15 Jan 2010 08:42:31 -0500 Received: from [199.232.76.173] (port=45639 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NVmRb-0006aq-7T for emacs-orgmode@gnu.org; Fri, 15 Jan 2010 08:42:31 -0500 Received: from ey-out-1920.google.com ([74.125.78.147]:36265) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NVmRa-0003GV-RJ for emacs-orgmode@gnu.org; Fri, 15 Jan 2010 08:42:31 -0500 Received: by ey-out-1920.google.com with SMTP id 4so194399eyg.34 for ; Fri, 15 Jan 2010 05:42:27 -0800 (PST) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-z+rAJhkOVhUJPxYSn9py Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Emacs : GNU Emacs 23.1.1 (i386-redhat-linux-gnu, GTK+ Version 2.18.3) of 2009-12-02 on x86-7.fedora.phx.redhat.com Package: Org-mode version 6.34a Hi all, When an org link is created from an URL containing a hex escape `org-make-link-string' creates a link that ends up corrupted the moment it is followed (e.g. using `org-open-at-point'). I've traced this back to `org-link-escape' and `org-link-unescape'. The following shows how the hex code "%2B" is converted to a "+" after an escaping round trip: (org-link-unescape (org-link-escape "http://some.host.com/form?&id=blah%2Bblah")) ==> "http://some.host.com/form?&id=blah+blah" In my case this small change ended up in a broken URL. Additionally, when the URL-escape happens to be in lower case (or otherwise not present in `org-link-escape-chars') we end up with an error: (org-link-unescape (org-link-escape "http://some.host.com/form?&id=blah%2bblah")) ==> Debugger entered--Lisp error: (wrong-type-argument characterp nil) char-to-string(nil) ... When `org-url-encoding-use-url-hexify' is set to `t' we do get a proper round trip of the URL containing hex-escapes: (setq org-url-encoding-use-url-hexify t) (org-link-unescape (org-link-escape "http://some.host.com/form?&id=blah%2bblah")) ==> "http://some.host.com/form?&id=blah%2bblah" Setting `org-url-encoding-use-url-hexify' does not fix the complete problem however: `org-open-at-point' still did not end up with the proper URL. Within `org-open-at-point' there is another call to `org-link-escape': (org-link-escape path org-link-escape-chars-browser) This time a mapping table is passed in explicitly (the second argument). However, when `org-url-encoding-use-url-hexify' is set,a this mapping table isn't used, resulting (again) in a broken URL. I have attached a patch that fixes the problem: do not use url-hexify in `org-link-escape' and `org-link-unescape' when an explicit mapping table has been specified. In summary: - the default behaviour of `org-link-escape', with `org-url-encoding-use-url-hexify' set to nil, has some issues with handling URLS which contain url-encoded hex escapes - when a mapping table is passed to `org-link-escape' and `org-link-unescape', they should probably not use url-hexify. Patch attached. Best regards, Geert Kloosterman --=-z+rAJhkOVhUJPxYSn9py Content-Disposition: attachment; filename="org.el.diff" Content-Type: text/x-patch; name="org.el.diff"; charset="UTF-8" Content-Transfer-Encoding: 7bit --- org.el.orig 2010-01-12 08:54:31.000000000 +0100 +++ org.el 2010-01-15 14:14:38.000000000 +0100 @@ -7893,7 +7893,7 @@ (defun org-link-escape (text &optional table) "Escape characters in TEXT that are problematic for links." - (if org-url-encoding-use-url-hexify + (if (and org-url-encoding-use-url-hexify (not table)) (url-hexify-string text) (setq table (or table org-link-escape-chars)) (when text @@ -7910,7 +7910,7 @@ (defun org-link-unescape (text &optional table) "Reverse the action of `org-link-escape'." - (if org-url-encoding-use-url-hexify + (if (and org-url-encoding-use-url-hexify (not table)) (url-unhex-string text) (setq table (or table org-link-escape-chars)) (when text --=-z+rAJhkOVhUJPxYSn9py Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode --=-z+rAJhkOVhUJPxYSn9py--