diff options
author | Kurtis Rader <krader@skepticism.us> | 2016-05-08 15:57:56 -0700 |
---|---|---|
committer | Kurtis Rader <krader@skepticism.us> | 2016-05-14 20:38:32 -0700 |
commit | 51468b764689e7d724a87e6c2b8cdb4e599a3604 (patch) | |
tree | 75fe13dbad791e0d143a3610bfe7ed7d0136ad38 /tests/function.in | |
parent | ff1d651415a2752e82ec417294f9bdf8c234c10f (diff) |
add `function --shadow-builtin` flag
It's currently too easy for someone to bork their shell by doing something
like `function test; return 0; end`. That's obviously a silly, contrived,
example but the point is that novice users who learn about functions are
prone to do something like that without realizing it will bork the shell. Even
expert users who know about the `test` builtin might forget that, say, `pwd`
is a builtin.
This change adds a `--shadow-builtin` flag that must be specified to
indicate you know what you're doing.
Fixes #3000
Diffstat (limited to 'tests/function.in')
-rw-r--r-- | tests/function.in | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/function.in b/tests/function.in index 747bbcec..8202fb13 100644 --- a/tests/function.in +++ b/tests/function.in @@ -44,3 +44,16 @@ for i in (seq 4) echo "Function name$i not found, but should have been" end end + +# Test that we can't define a function that shadows a builtin by accident. +function pwd; end +or echo 'yes, it failed as expected' >&2 + +# Test that we can define a function that shadows a builtin if we use the +# right flag. +function pwd --shadow-builtin; end +and echo '"function pwd --shadow-builtin" worked' + +# Using --shadow-builtin for a non-builtin function name also fails. +function not_builtin --shadow-builtin; end +or echo 'yes, it failed as expected' >&2 |