From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Madhu Newsgroups: gmane.emacs.bugs Subject: bug#74208: 31.0.50; minibuffer read-file-name-default mutates global value of default-directory incorrectly Date: Sun, 08 Dec 2024 16:19:24 +0530 (IST) Message-ID: <20241208.161924.1904937058365373006.enometh@meer.net> References: <8634izk7ky.fsf@gnu.org> <20241207.225357.658499983555480229.enometh@meer.net> <87y10qv9y1.fsf@gmx.de> Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Sun_Dec__8_16_19_24_2024_543)--" Content-Transfer-Encoding: 7bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="5112"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 74208@debbugs.gnu.org To: michael.albinus@gmx.de Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Dec 08 11:50:32 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 1tKErv-0001CZ-BW for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 08 Dec 2024 11:50:32 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tKErV-0004jn-To; Sun, 08 Dec 2024 05:50:05 -0500 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 1tKErT-0004hc-N1 for bug-gnu-emacs@gnu.org; Sun, 08 Dec 2024 05:50:03 -0500 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 1tKErS-0003km-MT for bug-gnu-emacs@gnu.org; Sun, 08 Dec 2024 05:50:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=Mime-Version:References:In-Reply-To:From:Date:To:Subject; bh=M4EykvIMH//cyB6ooigZwEvZof6ps5dyAy+rXqTi8xg=; b=L0SO2L6t+Wn+pIM17rED85tkaKX0enuSvIx83nL/pSicGPHpm7GC2WdRLJ6WdNnKbRUAHSPtqWrZK1E8Fidv7SS++YHm4yEiFC12RLb/cJeobbEokcDGs+dDF4rGkRiSen6N/fJYaliVDyTCG9O+z9kd3f4LL6FDlzTa8cAGIE1C/S3bURPMaZ97VA9FEVG3DQhaO/Hux+hte4oySk/Xa7OoZNqT0P8vAvdZrhyO0wkTbcjNDknzZcJlCX6YBRRDqsUzXHXq7CXHvWmg9bsw1O7BIWn/mwXlkiYSDpwSZRHtArs0573p5M9MMPlL7dHK64e7IXVA9GsSiFBRG41tqg==; Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1tKErS-0001li-Bw for bug-gnu-emacs@gnu.org; Sun, 08 Dec 2024 05:50:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Madhu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 08 Dec 2024 10:50:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 74208 X-GNU-PR-Package: emacs Original-Received: via spool by 74208-submit@debbugs.gnu.org id=B74208.17336549746745 (code B ref 74208); Sun, 08 Dec 2024 10:50:02 +0000 Original-Received: (at 74208) by debbugs.gnu.org; 8 Dec 2024 10:49:34 +0000 Original-Received: from localhost ([127.0.0.1]:49795 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tKEqz-0001ki-J4 for submit@debbugs.gnu.org; Sun, 08 Dec 2024 05:49:34 -0500 Original-Received: from smtp5.ctinetworks.com ([205.166.61.198]:52024) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tKEqx-0001kY-2y for 74208@debbugs.gnu.org; Sun, 08 Dec 2024 05:49:32 -0500 X-ctinetworks-Watermark: 1734518970.17476@ETkMAJs/VoRHqaHEiHHFPw X-ctinetworks-Envelope-From: enometh@meer.net X-ctinetworks-VirusCheck: Found to be clean X-ctinetworks-Message-ID: E444B2064ED0.A449C Original-Received: from localhost (unknown [117.254.36.205]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: enometh@meer.net) by smtp5.ctinetworks.com (Postfix) with ESMTPSA id E444B2064ED0; Sun, 8 Dec 2024 05:49:27 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp5.ctinetworks.com E444B2064ED0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=meer.net; s=ctidkims1; t=1733654968; bh=M4EykvIMH//cyB6ooigZwEvZof6ps5dyAy+rXqTi8xg=; h=Date:To:Cc:Subject:From:In-Reply-To:References:From; b=qf923CL0WWozTONkG4UEYWeqpCOyEYip7hL4gtBsBX/awXep2D5ZtULASG44DSJQJ et1qcZkVKGcVil3E4excjGjMTLa4VWt0RE0briYS4tYMkYoZCRuHwU3lQBlT9qn8mB vL4PKxW2o0jreJo8JqjfoxDVvHKEk+Vbe3MTJAkg= In-Reply-To: <87y10qv9y1.fsf@gmx.de> X-Mailer: Mew version 6.9 on Emacs 31.0.50 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:296625 Archived-At: ----Next_Part(Sun_Dec__8_16_19_24_2024_543)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit * Michael Albinus <87y10qv9y1.fsf@gmx.de> Wrote on Sun, 08 Dec 2024 09:46:30 +0100 > > unhandled-file-name-directory expects, that special constructs in > FILENAME are handled via a file name handler. Per default, > "https://www.gnu.org/" is not covered by a file name handler, so I > believe it is a non-valid value for default-directory. > > See > > --8<---------------cut here---------------start------------->8--- > (progn > (url-handler-mode) > (let ((default-directory "https://www.gnu.org/")) > (unhandled-file-name-directory default-directory))) > => nil > --8<---------------cut here---------------end--------------->8--- > > Whether nil is a proper value to be returned is questionable. However, > call-process and friends are able to handle a nil default-directory. Thanks, something like the attached? the implementation of "turn on url-handler-mode temporarily" looks a bit gross but i guess it can't be avoided. should call to turn it on be outside the minibuffer-setup-hook? --Regards, Madhu ----Next_Part(Sun_Dec__8_16_19_24_2024_543)-- Content-Type: Text/X-Patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="0001-minibuffer.el-read-file-name-default-handle-default-.patch" >From 91c22af6c317855370eb405f8daf6f56c68c4f9f Mon Sep 17 00:00:00 2001 From: Madhu Date: Tue, 5 Nov 2024 07:19:55 +0530 Subject: [PATCH] minibuffer.el: (read-file-name-default): handle default-directory urls * minibuffer.el: (read-file-name-default): bind default-directory (in dynamic scope) instead of modifying it, protect setting against non-local exits. Turn on url-handler-mode temporarily, so any calls to call-process and friends do not fail because the default-directory is a URL. (bug#24708) --- lisp/minibuffer.el | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index c970752ec2a..607a118dd53 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -3667,11 +3667,18 @@ read-file-name-default ;; just use `default-directory', but in order to avoid ;; changing `default-directory' in the current buffer, ;; we don't let-bind it. - (let ((dir (file-name-as-directory - (expand-file-name dir)))) + (let* ((dir (file-name-as-directory + (expand-file-name dir))) + (default-directory dir) + (orig-uhm url-handler-mode)) (minibuffer-with-setup-hook (lambda () - (setq default-directory dir) + ;; turn on url-handler-mode temporarily so + ;; call-process and friends don't fail on on a + ;; encountering a url default-directory + ;; (bug#74208) + (unless orig-uhm + (url-handler-mode 1)) ;; When the first default in `minibuffer-default' ;; duplicates initial input `insdef', ;; reset `minibuffer-default' to nil. @@ -3690,9 +3697,12 @@ read-file-name-default (window-buffer (minibuffer-selected-window)) (read-file-name--defaults dir initial)))) (set-syntax-table minibuffer-local-filename-syntax)) - (completing-read prompt 'read-file-name-internal - pred require-match insdef - 'file-name-history default-filename))) + (unwind-protect + (completing-read prompt 'read-file-name-internal + pred require-match insdef + 'file-name-history default-filename) + (unless orig-uhm + (url-handler-mode -1))))) ;; If DEFAULT-FILENAME not supplied and DIR contains ;; a file name, split it. (let ((file (file-name-nondirectory dir)) -- 2.46.0.27.gfa3b914457 ----Next_Part(Sun_Dec__8_16_19_24_2024_543)----