If the password file doesn't end with a new line, the last line is
ignored because read -r will return a non-zero status, while still
setting the $line variable. Some implementations of pass, like
gopass do not create a password file ending with a new line.
Therefore, using pass otp append on these files will result in the
password being remove from the file.
To fix that, we ensure we insert the new line if it is missing.
I have added a test, but this is not enough to catch the problem
because pass will add the new line even when it is missing (for
example, using echo -n | pass insert -e passfile won't help to
trigger the bug).
If the password file doesn't end with a new line, the last line is ignored because
read -r
will return a non-zero status, while still setting the$line
variable. Some implementations of pass, likegopass
do not create a password file ending with a new line. Therefore, usingpass otp append
on these files will result in the password being remove from the file.To fix that, we ensure we insert the new line if it is missing.
I have added a test, but this is not enough to catch the problem because
pass
will add the new line even when it is missing (for example, usingecho -n | pass insert -e passfile
won't help to trigger the bug).