term.ReadPassword reads the terminal with a raw read that returns 0 bytes at the end of input and takes that as nothing yet, so Ctrl-D at the prompt did nothing. On the Unix systems the prompt now sets the terminal as ReadPassword does and reads the line from standard input, which reports the end of input; elsewhere, such as Windows, it still uses ReadPassword. Ctrl-D with nothing typed gives an empty mnemonic, refused with status 1, and the terminal settings are put back. A test runs the tool on a pseudo-terminal (github.com/creack/pty, at a commit past v1.1.24, whose Open on Linux can return another pty's terminal) and types Ctrl-D at the prompt. Model: opus-5-5
This commit is contained in:
@@ -136,7 +136,7 @@ func ask() (string, error) {
|
||||
|
||||
fmt.Fprint(os.Stderr, "mnemonic: ")
|
||||
|
||||
typed, err := term.ReadPassword(fd)
|
||||
typed, err := readWithoutEcho()
|
||||
|
||||
fmt.Fprintln(os.Stderr)
|
||||
|
||||
@@ -144,7 +144,7 @@ func ask() (string, error) {
|
||||
return "", fmt.Errorf("reading the mnemonic: %w", err)
|
||||
}
|
||||
|
||||
return checked(string(typed))
|
||||
return checked(typed)
|
||||
}
|
||||
|
||||
// checked joins the words with single spaces, whatever whitespace
|
||||
|
||||
Reference in New Issue
Block a user