bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#54486: 29.0.50; Eshell `escaped' string property can "leak" into out


From: Jim Porter
Subject: bug#54486: 29.0.50; Eshell `escaped' string property can "leak" into output
Date: Sun, 20 Mar 2022 20:52:43 -0700

When using Eshell, it's possible to inadvertently add an `escaped' string property to strings, resulting in some pretty surprising behavior. Starting from "emacs -Q --eval '(eshell)'":

  ~ $ setq var (list "foo" "bar")
  ("foo" "bar")
  ~ $ echo $var
  ("foo" "bar")
  ~ $ echo $var[0]
  foo
  ~ $ echo $var
  (#("foo" 0 3
     (escaped t))
   "bar")

This happens because when the `$var[0]' argument is parsed in the third command, the function `eshell-interpolate-variable' wraps the code-to-be-called with `eshell-escape-arg'. That function adds an `escaped' property to any string passed into it.

The `escaped' property is used to indicate that the string should be treated literally (i.e. any special characters like "$" will no longer have any special meaning in Eshell). That's the right *behavior*, but ideally, there'd be a way to do so that doesn't involve manipulating the string like this. Eshell can't know the lifetime of the string, and it seems like a bad idea in general to go around messing with string properties just because you referenced that string somehow in Eshell.

I can't think of an obvious fix for this though. Any ideas?





reply via email to

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