From a49839168642843d5ea1aa3764d739c7a664b381 Mon Sep 17 00:00:00 2001 From: Arlo Siemsen Date: Wed, 17 Apr 2024 12:11:03 -0500 Subject: [PATCH 1/2] show buggy behavior of not trimming newlines in new credential process test --- tests/testsuite/credential_process.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/testsuite/credential_process.rs b/tests/testsuite/credential_process.rs index ec690fbaf3c..d1ab8a97333 100644 --- a/tests/testsuite/credential_process.rs +++ b/tests/testsuite/credential_process.rs @@ -695,3 +695,22 @@ fn alias_builtin_warning() { ) .run(); } + +#[cargo_test] +fn login_token_from_stdin() { + // Test reading a token from stdin, ensuring newlines are trimmed. + let registry = registry::RegistryBuilder::new() + .no_configure_token() + .credential_provider(&[&build_provider("test-cred", r#"{"Ok": {"kind": "login"}}"#)]) + .build(); + + cargo_process("login") + .replace_crates_io(registry.index_url()) + .with_stdin("abcdefg\n") + .with_stderr( + r#"[UPDATING] [..] +{"v":1,"registry":{"index-url":"https://github.com/rust-lang/crates.io-index","name":"crates-io"},"kind":"login","token":"abcdefg\n","login-url":"[..]"} +"#, + ) + .run(); +} From 6207f93087a05e8af3c48cdd66c24543f2972230 Mon Sep 17 00:00:00 2001 From: Arlo Siemsen Date: Wed, 17 Apr 2024 12:16:35 -0500 Subject: [PATCH 2/2] fix(credential): trim newlines in token from stdin for credential providers --- src/cargo/ops/registry/login.rs | 2 +- tests/testsuite/credential_process.rs | 2 +- tests/testsuite/login.rs | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cargo/ops/registry/login.rs b/src/cargo/ops/registry/login.rs index a3b23d20398..0db134a6da6 100644 --- a/src/cargo/ops/registry/login.rs +++ b/src/cargo/ops/registry/login.rs @@ -39,7 +39,7 @@ pub fn registry_login( let mut token_from_stdin = None; let token = token_from_cmdline.or_else(|| { if !std::io::stdin().is_terminal() { - let token = std::io::read_to_string(std::io::stdin()).unwrap_or_default(); + let token = cargo_credential::read_line().unwrap_or_default(); if !token.is_empty() { token_from_stdin = Some(token); } diff --git a/tests/testsuite/credential_process.rs b/tests/testsuite/credential_process.rs index d1ab8a97333..b097d9da0ae 100644 --- a/tests/testsuite/credential_process.rs +++ b/tests/testsuite/credential_process.rs @@ -709,7 +709,7 @@ fn login_token_from_stdin() { .with_stdin("abcdefg\n") .with_stderr( r#"[UPDATING] [..] -{"v":1,"registry":{"index-url":"https://github.com/rust-lang/crates.io-index","name":"crates-io"},"kind":"login","token":"abcdefg\n","login-url":"[..]"} +{"v":1,"registry":{"index-url":"https://github.com/rust-lang/crates.io-index","name":"crates-io"},"kind":"login","token":"abcdefg","login-url":"[..]"} "#, ) .run(); diff --git a/tests/testsuite/login.rs b/tests/testsuite/login.rs index 8ed6802f653..7bfd2b4634b 100644 --- a/tests/testsuite/login.rs +++ b/tests/testsuite/login.rs @@ -113,6 +113,7 @@ fn empty_login_token() { .with_stderr( "\ [UPDATING] crates.io index +please paste the token found on [..] below [ERROR] credential provider `cargo:token` failed action `login` Caused by: