Skip to content
Snippets Groups Projects
Commit 87e7dd8e authored by Matt Harbison's avatar Matt Harbison
Browse files

ui: ensure `getpass()` returns bytes

Previously, this could return either bytes or str.  I'm not sure which direction
we should go in, but since the input is bytes, I guess bytes makes sense as
output.  `debuguigetpass` crashed because it assumed bytes would be returned,
`sslcontext.load_cert_chain()` is happy with bytes or str if the type info in
PyCharm is correct, and `smtplib.SMTP.login()` wants str.

I couldn't figure out how to test this, because the test stalls for input with
`echo test | hg debuguigetpass --config ui.interactive=1`, likely because it
drains stdin before prompting.  The custom input reading with `ui.nontty=1` does
not.

I'm also a bit concerned with all of this encoding/decoding.  The existing code
in the mail module uses `encoding.strfromlocal()`, but the username and password
are ascii encoded/decoded in `mercurial.url.passwordmgr.find_user_password()`
with `pycompat.{str,bytes}url()`.  I'm not sure if this inconsistency could
cause subtle compatability issues.

Differential Revision: https://phab.mercurial-scm.org/D9375
parent 62329b75
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment