[PATCH 1/2] show: Fix behavior when password with empty name exists.
Holger Dell
zx2c4.com at holgerdell.com
Sun May 24 16:29:56 CEST 2020
Before this commit:
- insert password whose name is the empty string: `pass insert ""`
- now `pass`, `pass list`, and `pass show` behave like `pass show ""`.
This behavior is undesirable and it breaks other tools that rely on
`pass list`, such as the Firefox extension passff.
After this commit, `pass`, `pass list`, and `pass show` always list the
contents of the password store, even if a password with empty name
exists. `pass show ""` will still show the password as usual.
Moreover, the commit provides test cases that expose the bug.
Signed-off-by: Holger Dell <holgerdell at users.noreply.github.com>
---
src/password-store.sh | 2 +-
tests/t0020-show-tests.sh | 10 ++++++++++
tests/t0060-rm-tests.sh | 6 ++++++
tests/t0100-insert-tests.sh | 4 ++++
tests/t0200-edit-tests.sh | 7 +++++++
5 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/password-store.sh b/src/password-store.sh
index 77f3eda..92717b5 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -380,7 +380,7 @@ cmd_show() {
local path="$1"
local passfile="$PREFIX/$path.gpg"
check_sneaky_paths "$path"
- if [[ -f $passfile ]]; then
+ if [[ $# -eq 1 && -f $passfile ]]; then
if [[ $clip -eq 0 && $qrcode -eq 0 ]]; then
pass="$($GPG -d "${GPG_OPTS[@]}" "$passfile" | $BASE64)" || exit $?
echo "$pass" | $BASE64 -d
diff --git a/tests/t0020-show-tests.sh b/tests/t0020-show-tests.sh
index a4b782f..59afb5d 100755
--- a/tests/t0020-show-tests.sh
+++ b/tests/t0020-show-tests.sh
@@ -15,6 +15,16 @@ test_expect_success 'Test "show" command with spaces' '
[[ $("$PASS" show "I am a cred with lots of spaces") == "BLAH!!" ]]
'
+test_expect_success 'Test "show" command with empty pass-name' '
+ echo "Hello world" | "$PASS" insert -e "" &&
+ [[ $("$PASS" show "") == "Hello world" ]]
+'
+
+test_expect_success 'Test "show" command without pass-name' '
+ echo "Hello world" | "$PASS" insert -e "" &&
+ [[ $("$PASS" show) != "Hello world" ]]
+'
+
test_expect_success 'Test "show" of nonexistant password' '
test_must_fail "$PASS" show cred2
'
diff --git a/tests/t0060-rm-tests.sh b/tests/t0060-rm-tests.sh
index 58f55f3..3f74621 100755
--- a/tests/t0060-rm-tests.sh
+++ b/tests/t0060-rm-tests.sh
@@ -22,4 +22,10 @@ test_expect_success 'Test "rm" of non-existent password' '
test_must_fail "$PASS" rm does-not-exist
'
+test_expect_success 'Test "rm": without vs empty pass-name' '
+ "$PASS" generate "" 20 &&
+ test_must_fail "$PASS" rm &&
+ "$PASS" rm ""
+'
+
test_done
diff --git a/tests/t0100-insert-tests.sh b/tests/t0100-insert-tests.sh
index d8101ab..5eec7bc 100755
--- a/tests/t0100-insert-tests.sh
+++ b/tests/t0100-insert-tests.sh
@@ -10,4 +10,8 @@ test_expect_success 'Test "insert" command' '
[[ $("$PASS" show cred1) == "Hello world" ]]
'
+test_expect_success 'Test "insert" command without pass-name' '
+ echo "Hello world" | test_must_fail "$PASS" insert -e
+'
+
test_done
diff --git a/tests/t0200-edit-tests.sh b/tests/t0200-edit-tests.sh
index d8d7b64..65afc92 100755
--- a/tests/t0200-edit-tests.sh
+++ b/tests/t0200-edit-tests.sh
@@ -14,4 +14,11 @@ test_expect_success 'Test "edit" command' '
[[ $("$PASS" show cred1) == "$FAKE_EDITOR_PASSWORD" ]]
'
+test_expect_success 'Test "edit": without vs empty pass-name' '
+ "$PASS" generate "" 20 &&
+ test_must_fail "$PASS" edit &&
+ "$PASS" edit "" &&
+ [[ $("$PASS" show "") == "$FAKE_EDITOR_PASSWORD" ]]
+'
+
test_done
--
2.25.1
More information about the Password-Store
mailing list