[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