From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Dagfinn Ilmari =?UTF-8?Q?Manns=C3=A5ker?= Newsgroups: gmane.emacs.bugs Subject: bug#70312: [PATCH v2] Avoid unnecessary escaping in url-build-query-string Date: Tue, 09 Apr 2024 17:41:07 +0100 Message-ID: <87zfu2ij4s.fsf@wibble.ilmari.org> References: <8734ruk3tf.fsf@wibble.ilmari.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="39411"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) To: 70312@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Apr 09 18:42:33 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ruEYJ-000A4x-QC for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 09 Apr 2024 18:42:33 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ruEXr-00089t-UF; Tue, 09 Apr 2024 12:42:04 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ruEXk-000872-T0 for bug-gnu-emacs@gnu.org; Tue, 09 Apr 2024 12:41:59 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ruEXk-0007mZ-E7 for bug-gnu-emacs@gnu.org; Tue, 09 Apr 2024 12:41:56 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ruEXq-0000ZZ-Sg for bug-gnu-emacs@gnu.org; Tue, 09 Apr 2024 12:42:02 -0400 X-Loop: help-debbugs@gnu.org In-Reply-To: <8734ruk3tf.fsf@wibble.ilmari.org> Resent-From: Dagfinn Ilmari =?UTF-8?Q?Manns=C3=A5ker?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 09 Apr 2024 16:42:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 70312 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 70312-submit@debbugs.gnu.org id=B70312.17126808912040 (code B ref 70312); Tue, 09 Apr 2024 16:42:02 +0000 Original-Received: (at 70312) by debbugs.gnu.org; 9 Apr 2024 16:41:31 +0000 Original-Received: from localhost ([127.0.0.1]:51306 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ruEXL-0000Wq-0e for submit@debbugs.gnu.org; Tue, 09 Apr 2024 12:41:31 -0400 Original-Received: from fout4-smtp.messagingengine.com ([103.168.172.147]:38381) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ruEXE-0000VF-Di for 70312@debbugs.gnu.org; Tue, 09 Apr 2024 12:41:28 -0400 Original-Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailfout.nyi.internal (Postfix) with ESMTP id 95D12138018C for <70312@debbugs.gnu.org>; Tue, 9 Apr 2024 12:41:10 -0400 (EDT) Original-Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Tue, 09 Apr 2024 12:41:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ilmari.org; h=cc :content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm1; t=1712680870; x=1712767270; bh=IEmemT7t1oF0Aet+xPBrkGB70p3ZAaIb V8RP76+Wl24=; b=My5yiv+luiJ2ruXVVn6/g4fnt1pZNuNRP2pU8jD7K+Hi0FtA Gac0cZFw0wIUBNy7mLTPtNFTSX90yBueBhalOU590pBvXh6Q3b0B2SFbDMyREop5 Ox+/8JjXnfQ08uF0Re/PawO2uX3ZrBUSaGN5GWPnEKnebUY+Xg/oyiJtt9uwXHph NPxFjQcQnPaV8uQhtl0wETphCOqCjGm5YszC1q6KZBzMoXU6i5+GJWs80YgUvtwT lRkPf6AQYSaYcwEo48Gw3MvdVVOpMT42Xom0xZdIdKryVfcEa0j7pkKJwgy5NGXy 6bM05/McUPD4xfEqVwBt8dy3cR+RAkWfE3w40A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1712680870; x=1712767270; bh=IEmemT7t1oF0Aet+xPBrkGB70p3ZAaIbV8R P76+Wl24=; b=Hf1gtuUz+BSJvf+qlckkL5G5p1RNf6fZ5QRwkuhNmlEpOidGHmr n++GflO0DbjcBaSQnN0L+jVrg3burZWSoVr0ctRdLJDvUA+tjrtoI049gnXHxtz+ g8ipczUhm5FEBqrPxdgb5cC7YlNTpXcTsUZlIbE50a5w0NJaM1ZrHvZ5NY1CBOQG xs/1aYLNbWopIKQ92T8PYTFBpEEGfRO+t180ycQbjiknokwHJc5Ki4CgrniuLTnL A7oS1/QuqbtPKniCvoraF6RKk8d2LLipVpTGgCBQ80oOq3k/DMPRe1az4xUxrpYS FDMo1FI9OL1Ic0TClKiVnScpy26WM/acDew== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrudehfedguddvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvffufffkfgggtgesmhdtreertd erjeenucfhrhhomhepffgrghhfihhnnhcukfhlmhgrrhhiucforghnnhhsnohkvghruceo ihhlmhgrrhhisehilhhmrghrihdrohhrgheqnecuggftrfgrthhtvghrnhepieeiveetvd euveevkeefueejieekgfdvtdetffekgeejtedvjeetheehueeliedvnecuvehluhhsthgv rhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepihhlmhgrrhhisehilhhmrg hrihdrohhrgh X-ME-Proxy: Feedback-ID: i1ff147bf:Fastmail Original-Received: by mail.messagingengine.com (Postfix) with ESMTPA for <70312@debbugs.gnu.org>; Tue, 9 Apr 2024 12:41:09 -0400 (EDT) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:282999 Archived-At: --=-=-= Content-Type: text/plain Hi again, I realised I'd forgotten to add tests, and that made me realise that url-query-allowed-chars is not correct for this, since that also contains '=', '&', and ';'. So here's an updated patch, which creates a new url-query-key-value-allowed-chars constant, which is url-query-allowed-chars minus the aforementioned three chars, and adds tests covering that, for both keys and values. - ilmari --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=v2-0001-Avoid-unnecessary-escaping-in-url-build-query-str.patch >From 89db0a1226d8d7cca1846e9c737d4a67c971ec75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= Date: Tue, 9 Apr 2024 15:02:45 +0100 Subject: [PATCH v2] Avoid unnecessary escaping in url-build-query-string * lisp/url/url-util.el (url-build-query-string): Create a new url-query-key-value-allowed-chars constant and pass that to url-hexify-string to avoid unnecessarily escaping characters that don't need to be escaped in query string keys and values. * test/lisp/url/url-util-tests.el (url-util-tests): Add test cases. --- lisp/url/url-util.el | 12 +++++++++++- test/lisp/url/url-util-tests.el | 6 +++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el index 5f45b98c7a5..f063efe18a6 100644 --- a/lisp/url/url-util.el +++ b/lisp/url/url-util.el @@ -268,7 +268,8 @@ url-build-query-string (lambda (key-vals) (let ((escaped (mapcar (lambda (sym) - (url-hexify-string (format "%s" sym))) key-vals))) + (url-hexify-string (format "%s" sym) url-query-key-value-allowed-chars)) + key-vals))) (mapconcat (lambda (val) (let ((vprint (format "%s" val)) (eprint (format "%s" (car escaped)))) @@ -410,6 +411,15 @@ url-query-allowed-chars "Allowed-character byte mask for the query segment of a URI. These characters are specified in RFC 3986, Appendix A.") +(defconst url-query-key-value-allowed-chars + (let ((vec (copy-sequence url-query-allowed-chars))) + (aset vec ?= nil) + (aset vec ?& nil) + (aset vec ?\; nil) + vec) + "Allowed-charcter byte mask for keys and values in the query segment of a URI. +url-query-allowed-chars minus '=', '&', and ';'.") + ;;;###autoload (defun url-encode-url (url) "Return a properly URI-encoded version of URL. diff --git a/test/lisp/url/url-util-tests.el b/test/lisp/url/url-util-tests.el index 133aa0ffd88..c6246d69a2a 100644 --- a/test/lisp/url/url-util-tests.el +++ b/test/lisp/url/url-util-tests.el @@ -32,7 +32,11 @@ url-util-tests ("key1=val1;key2=val2;key3=val1;key3=val2;key4;key5" ((key1 "val1") (key2 val2) (key3 val1 val2) ("key4") (key5 "")) t) ("key1=val1;key2=val2;key3=val1;key3=val2;key4=;key5=" - ((key1 val1) (key2 val2) ("key3" val1 val2) (key4) (key5 "")) t t))) + ((key1 val1) (key2 val2) ("key3" val1 val2) (key4) (key5 "")) t t) + ("key1=val/slash;key2=val%3Bsemi;key3=val%26amp;key4=val%3Deq" + ((key1 "val/slash") (key2 "val;semi") (key3 "val&") (key4 "val=eq")) t) + ("key%3Deq=val1;key%3Bsemi=val2;key%26amp=val3" + (("key=eq" val1) ("key;semi" val2) ("key&" val3)) t))) test) (while tests (setq test (car tests) -- 2.39.2 --=-=-=--