GNU bug report logs - #23779
25.0.95; consing "SHELLVAR" onto process-environment doesn't remove it from subprocess env

Previous Next

Package: emacs;

Reported by: Noam Postavsky <npostavs <at> users.sourceforge.net>

Date: Fri, 17 Jun 2016 03:34:02 UTC

Severity: normal

Found in version 25.0.95

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Noam Postavsky <npostavs <at> users.sourceforge.net>
Subject: bug#23779: closed (Re: bug#23779: 25.0.95; consing "SHELLVAR"
 onto process-environment doesn't remove it from subprocess env)
Date: Mon, 20 Jun 2016 14:23:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#23779: 25.0.95; consing "SHELLVAR" onto process-environment doesn't remove it from subprocess env

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 23779 <at> debbugs.gnu.org.

-- 
23779: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=23779
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: npostavs <at> users.sourceforge.net, schwab <at> linux-m68k.org,
 23779-done <at> debbugs.gnu.org, dgutov <at> yandex.ru
Subject: Re: bug#23779: 25.0.95; consing "SHELLVAR" onto process-environment
 doesn't remove it from subprocess env
Date: Mon, 20 Jun 2016 17:21:03 +0300
> Cc: dgutov <at> yandex.ru, schwab <at> linux-m68k.org, npostavs <at> users.sourceforge.net,
>  23779 <at> debbugs.gnu.org
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Mon, 20 Jun 2016 00:53:21 +0200
> 
> On 06/19/2016 05:01 PM, Eli Zaretskii wrote:
> >> >I resisted the temptation of cleaning up the surrounding code to
> >> >make it more readable.
> > Feel free to do that on master; I can mark the emacs-25 fix "not to be
> > merged".
> 
> Please don't bother.

OK, thanks.  Pushed as 5f37572 on the emacs-25 branch, and closing.

[Message part 3 (message/rfc822, inline)]
From: Noam Postavsky <npostavs <at> users.sourceforge.net>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.0.95; consing "SHELLVAR" onto process-environment doesn't remove
 it from subprocess env
Date: Thu, 16 Jun 2016 23:33:02 -0400
Start emacs -Q, evaluate the following lisp code (I wrote the return
values after ;=>)

(defun check-env-var (var)
  (catch 'ret
    (dolist (var=val (process-lines "env"))
      (when (string-prefix-p var var=val)
        (throw 'ret var=val)))))

(check-env-var "SHELL");=>"SHELL=/bin/bash"
(let ((process-environment (copy-sequence process-environment)))
  (setenv "SHELL" nil)
  (check-env-var "SHELL"));=>nil
(let ((process-environment (cons "SHELL" process-environment)))
  (check-env-var "SHELL"));=>"SHELL=/bin/bash"
(let ((process-environment (cons "SHELL=" process-environment)))
  (check-env-var "SHELL"));=>"SHELL="

As you can see from the 3rd expression, contrary to its docstring,
consing the env variable "SHELL" onto process-environment has no
effect at all.

process-environment is a variable defined in ‘C source code’.
Its value is
[...]
Documentation:
List of overridden environment variables for subprocesses to inherit.
Each element should be a string of the form ENVVARNAME=VALUE.

Entries in this list take precedence to those in the frame-local
environments.  Therefore, let-binding ‘process-environment’ is an easy
way to temporarily change the value of an environment variable,
irrespective of where it comes from.  To use ‘process-environment’ to
remove an environment variable, include only its name in the list,
without "=VALUE".



This bug report was last modified 8 years and 338 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.