[INFO] fetching crate rust-smtp-server 0.1.1... [INFO] testing rust-smtp-server-0.1.1 against 1.90.0 for beta-1.91-3 [INFO] extracting crate rust-smtp-server 0.1.1 into /workspace/builds/worker-0-tc1/source [INFO] started tweaking crates.io crate rust-smtp-server 0.1.1 [INFO] finished tweaking crates.io crate rust-smtp-server 0.1.1 [INFO] tweaked toml for crates.io crate rust-smtp-server 0.1.1 written to /workspace/builds/worker-0-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate rust-smtp-server 0.1.1 on toolchain 1.90.0 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.90.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate rust-smtp-server 0.1.1 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.90.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] warning: file `/workspace/builds/worker-0-tc1/source/examples/simple.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `simple` [INFO] [stderr] * `example` target `simple` [INFO] [stderr] warning: file `/workspace/builds/worker-0-tc1/source/examples/with_starttls_support.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `with_starttls_support` [INFO] [stderr] * `example` target `with_starttls_support` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded rustls-pemfile v1.0.2 [INFO] [stderr] Downloaded syn v2.0.13 [INFO] [stderr] Downloaded rustls v0.20.8 [INFO] [stderr] Downloaded libc v0.2.141 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+1.90.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] f4df254f618d3104191ce797f72555b03a483ed75c7dd9d6d6770f5eb6265867 [INFO] running `Command { std: "docker" "start" "-a" "f4df254f618d3104191ce797f72555b03a483ed75c7dd9d6d6770f5eb6265867", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "f4df254f618d3104191ce797f72555b03a483ed75c7dd9d6d6770f5eb6265867", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f4df254f618d3104191ce797f72555b03a483ed75c7dd9d6d6770f5eb6265867", kill_on_drop: false }` [INFO] [stdout] f4df254f618d3104191ce797f72555b03a483ed75c7dd9d6d6770f5eb6265867 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+1.90.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 047cd39932f50c10916ad44532b8174131d5e16f071a464f27f1542bb4b6fb20 [INFO] running `Command { std: "docker" "start" "-a" "047cd39932f50c10916ad44532b8174131d5e16f071a464f27f1542bb4b6fb20", kill_on_drop: false }` [INFO] [stderr] warning: file `/opt/rustwide/workdir/examples/simple.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `simple` [INFO] [stderr] * `example` target `simple` [INFO] [stderr] warning: file `/opt/rustwide/workdir/examples/with_starttls_support.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `with_starttls_support` [INFO] [stderr] * `example` target `with_starttls_support` [INFO] [stderr] Compiling libc v0.2.141 [INFO] [stderr] Compiling proc-macro2 v1.0.56 [INFO] [stderr] Compiling unicode-ident v1.0.8 [INFO] [stderr] Compiling quote v1.0.26 [INFO] [stderr] Compiling cc v1.0.79 [INFO] [stderr] Compiling log v0.4.17 [INFO] [stderr] Compiling spin v0.5.2 [INFO] [stderr] Compiling untrusted v0.7.1 [INFO] [stderr] Compiling once_cell v1.17.1 [INFO] [stderr] Compiling parking_lot_core v0.9.7 [INFO] [stderr] Compiling smallvec v1.10.0 [INFO] [stderr] Compiling memchr v2.5.0 [INFO] [stderr] Compiling rustls v0.20.8 [INFO] [stderr] Compiling lock_api v0.4.9 [INFO] [stderr] Compiling tokio v1.27.0 [INFO] [stderr] Compiling async-trait v0.1.68 [INFO] [stderr] Compiling pin-project-lite v0.2.9 [INFO] [stderr] Compiling anyhow v1.0.70 [INFO] [stderr] Compiling bytes v1.4.0 [INFO] [stderr] Compiling thiserror v1.0.40 [INFO] [stderr] Compiling aho-corasick v0.7.20 [INFO] [stderr] Compiling syn v2.0.13 [INFO] [stderr] Compiling num_cpus v1.15.0 [INFO] [stderr] Compiling signal-hook-registry v1.4.1 [INFO] [stderr] Compiling socket2 v0.4.9 [INFO] [stderr] Compiling mio v0.8.6 [INFO] [stderr] Compiling parking_lot v0.12.1 [INFO] [stderr] Compiling ring v0.16.20 [INFO] [stderr] Compiling regex v1.7.3 [INFO] [stderr] Compiling tokio-macros v2.0.0 [INFO] [stderr] Compiling thiserror-impl v1.0.40 [INFO] [stderr] Compiling sct v0.7.0 [INFO] [stderr] Compiling webpki v0.22.0 [INFO] [stderr] Compiling tokio-rustls v0.23.4 [INFO] [stderr] Compiling rust-smtp-server v0.1.1 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `Session` [INFO] [stdout] --> src/server.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | Session, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::pin::Pin` [INFO] [stdout] --> src/server.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::pin::Pin; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::sync::Mutex` [INFO] [stdout] --> src/server.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use tokio::sync::Mutex; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AsyncReadExt` and `BufWriter` [INFO] [stdout] --> src/server.rs:15:23 [INFO] [stdout] | [INFO] [stdout] 15 | use tokio::io::{self, BufWriter, AsyncBufReadExt, AsyncReadExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `TcpStream` [INFO] [stdout] --> src/server.rs:16:31 [INFO] [stdout] | [INFO] [stdout] 16 | use tokio::net::{TcpListener, TcpStream}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::pin::Pin` [INFO] [stdout] --> src/conn.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::pin::Pin; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Context` and `Poll` [INFO] [stdout] --> src/conn.rs:8:17 [INFO] [stdout] | [INFO] [stdout] 8 | use std::task::{Context, Poll}; [INFO] [stdout] | ^^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `TcpSocket`, `tcp::ReadHalf`, and `tcp::WriteHalf` [INFO] [stdout] --> src/conn.rs:24:18 [INFO] [stdout] | [INFO] [stdout] 24 | use tokio::net::{tcp::ReadHalf, tcp::WriteHalf, TcpStream, TcpSocket}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `TlsAcceptor` and `rustls::ServerConfig` [INFO] [stdout] --> src/conn.rs:25:20 [INFO] [stdout] | [INFO] [stdout] 25 | use tokio_rustls::{rustls::ServerConfig, TlsAcceptor, server::TlsStream}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Arc` [INFO] [stdout] --> src/lengthlimit_reader.rs:1:17 [INFO] [stdout] | [INFO] [stdout] 1 | use std::sync::{Arc}; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ReadHalf` and `net::TcpStream` [INFO] [stdout] --> src/lengthlimit_reader.rs:6:18 [INFO] [stdout] | [INFO] [stdout] 6 | use tokio::{io::{ReadHalf, AsyncRead, AsyncReadExt}, net::TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::stream::Stream` [INFO] [stdout] --> src/lengthlimit_reader.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use crate::stream::Stream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::Mutex` [INFO] [stdout] --> src/lengthlimit_reader.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::sync::Mutex; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::stream::Stream` [INFO] [stdout] --> src/textproto/textproto.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::stream::Stream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `IpAddr`, `Ipv4Addr`, and `SocketAddr` [INFO] [stdout] --> src/textproto/textproto.rs:4:16 [INFO] [stdout] | [INFO] [stdout] 4 | use std::net::{IpAddr, Ipv4Addr, SocketAddr}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::pin::Pin` [INFO] [stdout] --> src/textproto/textproto.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::pin::Pin; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Arc` and `Mutex` [INFO] [stdout] --> src/textproto/textproto.rs:6:17 [INFO] [stdout] | [INFO] [stdout] 6 | use std::sync::{Arc, Mutex}; [INFO] [stdout] | ^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::net::TcpStream` [INFO] [stdout] --> src/textproto/textproto.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use tokio::net::TcpStream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AsyncBufReadExt`, `AsyncWriteExt`, and `BufReader` [INFO] [stdout] --> src/textproto/textproto.rs:8:40 [INFO] [stdout] | [INFO] [stdout] 8 | use tokio::io::{AsyncWrite, AsyncRead, AsyncWriteExt, AsyncBufReadExt, BufReader}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Arc` and `Mutex` [INFO] [stdout] --> src/textproto/writer.rs:1:17 [INFO] [stdout] | [INFO] [stdout] 1 | use std::sync::{Arc, Mutex}; [INFO] [stdout] | ^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/server.rs:75:13 [INFO] [stdout] | [INFO] [stdout] 75 | let mut server = Arc::new(self); [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/server.rs:79:25 [INFO] [stdout] | [INFO] [stdout] 79 | let mut server = server.clone(); [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `e` [INFO] [stdout] --> src/textproto/writer.rs:98:24 [INFO] [stdout] | [INFO] [stdout] 98 | if let Err(e) = self.w.w.write_u8(c).await { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_e` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `username` [INFO] [stdout] --> src/backend.rs:50:30 [INFO] [stdout] | [INFO] [stdout] 50 | fn auth_plain(&mut self, username: &str, password: &str) -> Result<()> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_username` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `password` [INFO] [stdout] --> src/backend.rs:50:46 [INFO] [stdout] | [INFO] [stdout] 50 | fn auth_plain(&mut self, username: &str, password: &str) -> Result<()> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_password` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/data.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | let mut this = self.get_mut(); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function cannot return without recursing [INFO] [stdout] --> src/textproto/writer.rs:135:5 [INFO] [stdout] | [INFO] [stdout] 135 | / fn poll_write( [INFO] [stdout] 136 | | self: std::pin::Pin<&mut Self>, [INFO] [stdout] 137 | | cx: &mut std::task::Context<'_>, [INFO] [stdout] 138 | | buf: &[u8], [INFO] [stdout] 139 | | ) -> std::task::Poll> { [INFO] [stdout] | |________________________________________________^ cannot return without recursing [INFO] [stdout] 140 | self.poll_write(cx, buf) [INFO] [stdout] | ------------------------ recursive call site [INFO] [stdout] | [INFO] [stdout] = help: a `loop` may express intention better if this is on purpose [INFO] [stdout] = note: `#[warn(unconditional_recursion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function cannot return without recursing [INFO] [stdout] --> src/textproto/writer.rs:143:5 [INFO] [stdout] | [INFO] [stdout] 143 | / fn poll_flush( [INFO] [stdout] 144 | | self: std::pin::Pin<&mut Self>, [INFO] [stdout] 145 | | cx: &mut std::task::Context<'_>, [INFO] [stdout] 146 | | ) -> std::task::Poll> { [INFO] [stdout] | |_____________________________________________^ cannot return without recursing [INFO] [stdout] 147 | self.poll_flush(cx) [INFO] [stdout] | ------------------- recursive call site [INFO] [stdout] | [INFO] [stdout] = help: a `loop` may express intention better if this is on purpose [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function cannot return without recursing [INFO] [stdout] --> src/textproto/writer.rs:150:5 [INFO] [stdout] | [INFO] [stdout] 150 | / fn poll_shutdown( [INFO] [stdout] 151 | | self: std::pin::Pin<&mut Self>, [INFO] [stdout] 152 | | cx: &mut std::task::Context<'_>, [INFO] [stdout] 153 | | ) -> std::task::Poll> { [INFO] [stdout] | |_____________________________________________^ cannot return without recursing [INFO] [stdout] 154 | self.poll_shutdown(cx) [INFO] [stdout] | ---------------------- recursive call site [INFO] [stdout] | [INFO] [stdout] = help: a `loop` may express intention better if this is on purpose [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ERR_TCP_AND_LMTP` is never used [INFO] [stdout] --> src/server.rs:20:7 [INFO] [stdout] | [INFO] [stdout] 20 | const ERR_TCP_AND_LMTP: &str = "smtp: cannot start LMTP server listening on a TCP socket"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `enhanced_code` is never read [INFO] [stdout] --> src/data.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct SMTPError { [INFO] [stdout] | --------- field in this struct [INFO] [stdout] 10 | code: u16, [INFO] [stdout] 11 | enhanced_code: EnhancedCode, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_temporary` is never used [INFO] [stdout] --> src/data.rs:65:8 [INFO] [stdout] | [INFO] [stdout] 36 | impl SMTPError { [INFO] [stdout] | -------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 65 | fn is_temporary(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ERR_THRESHOLD` is never used [INFO] [stdout] --> src/conn.rs:27:7 [INFO] [stdout] | [INFO] [stdout] 27 | const ERR_THRESHOLD: usize = 3; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `encode_xtext` is never used [INFO] [stdout] --> src/conn.rs:709:4 [INFO] [stdout] | [INFO] [stdout] 709 | fn encode_xtext(raw: String) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ERR_TOO_LONG_LINE` is never used [INFO] [stdout] --> src/lengthlimit_reader.rs:11:7 [INFO] [stdout] | [INFO] [stdout] 11 | const ERR_TOO_LONG_LINE: &str = "smtp: too long a line in input stream"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `r` and `cur_line_length` are never read [INFO] [stdout] --> src/lengthlimit_reader.rs:14:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct LineLimitReader { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 14 | pub r: R, [INFO] [stdout] | ^ [INFO] [stdout] ... [INFO] [stdout] 17 | pub cur_line_length: usize, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `read` is never used [INFO] [stdout] --> src/lengthlimit_reader.rs:29:14 [INFO] [stdout] | [INFO] [stdout] 20 | impl LineLimitReader { [INFO] [stdout] | --------------------------------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 29 | async fn read(&mut self, b: &mut [u8]) -> Result { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MyError` is never constructed [INFO] [stdout] --> src/textproto/textproto.rs:14:8 [INFO] [stdout] | [INFO] [stdout] 14 | struct MyError { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `ProtocolError` is never used [INFO] [stdout] --> src/textproto/textproto.rs:25:6 [INFO] [stdout] | [INFO] [stdout] 25 | type ProtocolError = String; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Begin` is never constructed [INFO] [stdout] --> src/textproto/writer.rs:45:5 [INFO] [stdout] | [INFO] [stdout] 44 | enum WState { [INFO] [stdout] | ------ variant in this enum [INFO] [stdout] 45 | Begin, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/textproto/pipeline.rs:68:9 [INFO] [stdout] | [INFO] [stdout] 68 | rx.await; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 68 | let _ = rx.await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/textproto/writer.rs:36:13 [INFO] [stdout] | [INFO] [stdout] 36 | (*dot).close().await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 36 | let _ = (*dot).close().await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `crnl` should have an upper case name [INFO] [stdout] --> src/textproto/writer.rs:41:7 [INFO] [stdout] | [INFO] [stdout] 41 | const crnl: [u8; 2] = [b'\r', b'\n']; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_upper_case_globals)]` on by default [INFO] [stdout] help: convert the identifier to upper case [INFO] [stdout] | [INFO] [stdout] 41 - const crnl: [u8; 2] = [b'\r', b'\n']; [INFO] [stdout] 41 + const CRNL: [u8; 2] = [b'\r', b'\n']; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `dotcrnl` should have an upper case name [INFO] [stdout] --> src/textproto/writer.rs:42:7 [INFO] [stdout] | [INFO] [stdout] 42 | const dotcrnl: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: convert the identifier to upper case [INFO] [stdout] | [INFO] [stdout] 42 - const dotcrnl: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stdout] 42 + const DOTCRNL: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 20.91s [INFO] running `Command { std: "docker" "inspect" "047cd39932f50c10916ad44532b8174131d5e16f071a464f27f1542bb4b6fb20", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "047cd39932f50c10916ad44532b8174131d5e16f071a464f27f1542bb4b6fb20", kill_on_drop: false }` [INFO] [stdout] 047cd39932f50c10916ad44532b8174131d5e16f071a464f27f1542bb4b6fb20 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+1.90.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 93f80bb8ae676fd26a54dc02938a862adfbc0ce7c7fdaca9d2b470612e44cc41 [INFO] running `Command { std: "docker" "start" "-a" "93f80bb8ae676fd26a54dc02938a862adfbc0ce7c7fdaca9d2b470612e44cc41", kill_on_drop: false }` [INFO] [stderr] warning: file `/opt/rustwide/workdir/examples/simple.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `simple` [INFO] [stderr] * `example` target `simple` [INFO] [stderr] warning: file `/opt/rustwide/workdir/examples/with_starttls_support.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `with_starttls_support` [INFO] [stderr] * `example` target `with_starttls_support` [INFO] [stderr] Compiling base64 v0.21.0 [INFO] [stdout] warning: unused import: `Session` [INFO] [stdout] --> src/server.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | Session, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::pin::Pin` [INFO] [stdout] --> src/server.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::pin::Pin; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::sync::Mutex` [INFO] [stdout] --> src/server.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use tokio::sync::Mutex; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AsyncReadExt` and `BufWriter` [INFO] [stdout] --> src/server.rs:15:23 [INFO] [stdout] | [INFO] [stdout] 15 | use tokio::io::{self, BufWriter, AsyncBufReadExt, AsyncReadExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `TcpStream` [INFO] [stdout] --> src/server.rs:16:31 [INFO] [stdout] | [INFO] [stdout] 16 | use tokio::net::{TcpListener, TcpStream}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::pin::Pin` [INFO] [stdout] --> src/conn.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::pin::Pin; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Context` and `Poll` [INFO] [stdout] --> src/conn.rs:8:17 [INFO] [stdout] | [INFO] [stdout] 8 | use std::task::{Context, Poll}; [INFO] [stdout] | ^^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `TcpSocket`, `tcp::ReadHalf`, and `tcp::WriteHalf` [INFO] [stdout] --> src/conn.rs:24:18 [INFO] [stdout] | [INFO] [stdout] 24 | use tokio::net::{tcp::ReadHalf, tcp::WriteHalf, TcpStream, TcpSocket}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `TlsAcceptor` and `rustls::ServerConfig` [INFO] [stdout] --> src/conn.rs:25:20 [INFO] [stdout] | [INFO] [stdout] 25 | use tokio_rustls::{rustls::ServerConfig, TlsAcceptor, server::TlsStream}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Arc` [INFO] [stdout] --> src/lengthlimit_reader.rs:1:17 [INFO] [stdout] | [INFO] [stdout] 1 | use std::sync::{Arc}; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ReadHalf` and `net::TcpStream` [INFO] [stdout] --> src/lengthlimit_reader.rs:6:18 [INFO] [stdout] | [INFO] [stdout] 6 | use tokio::{io::{ReadHalf, AsyncRead, AsyncReadExt}, net::TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::stream::Stream` [INFO] [stdout] --> src/lengthlimit_reader.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use crate::stream::Stream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::Mutex` [INFO] [stdout] --> src/lengthlimit_reader.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::sync::Mutex; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::stream::Stream` [INFO] [stdout] --> src/textproto/textproto.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::stream::Stream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `IpAddr`, `Ipv4Addr`, and `SocketAddr` [INFO] [stdout] --> src/textproto/textproto.rs:4:16 [INFO] [stdout] | [INFO] [stdout] 4 | use std::net::{IpAddr, Ipv4Addr, SocketAddr}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::pin::Pin` [INFO] [stdout] --> src/textproto/textproto.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::pin::Pin; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Arc` and `Mutex` [INFO] [stdout] --> src/textproto/textproto.rs:6:17 [INFO] [stdout] | [INFO] [stdout] 6 | use std::sync::{Arc, Mutex}; [INFO] [stdout] | ^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::net::TcpStream` [INFO] [stdout] --> src/textproto/textproto.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use tokio::net::TcpStream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AsyncBufReadExt`, `AsyncWriteExt`, and `BufReader` [INFO] [stdout] --> src/textproto/textproto.rs:8:40 [INFO] [stdout] | [INFO] [stdout] 8 | use tokio::io::{AsyncWrite, AsyncRead, AsyncWriteExt, AsyncBufReadExt, BufReader}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Arc` and `Mutex` [INFO] [stdout] --> src/textproto/writer.rs:1:17 [INFO] [stdout] | [INFO] [stdout] 1 | use std::sync::{Arc, Mutex}; [INFO] [stdout] | ^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/server.rs:75:13 [INFO] [stdout] | [INFO] [stdout] 75 | let mut server = Arc::new(self); [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/server.rs:79:25 [INFO] [stdout] | [INFO] [stdout] 79 | let mut server = server.clone(); [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `e` [INFO] [stdout] --> src/textproto/writer.rs:98:24 [INFO] [stdout] | [INFO] [stdout] 98 | if let Err(e) = self.w.w.write_u8(c).await { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_e` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `username` [INFO] [stdout] --> src/backend.rs:50:30 [INFO] [stdout] | [INFO] [stdout] 50 | fn auth_plain(&mut self, username: &str, password: &str) -> Result<()> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_username` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `password` [INFO] [stdout] --> src/backend.rs:50:46 [INFO] [stdout] | [INFO] [stdout] 50 | fn auth_plain(&mut self, username: &str, password: &str) -> Result<()> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_password` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/data.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | let mut this = self.get_mut(); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function cannot return without recursing [INFO] [stdout] --> src/textproto/writer.rs:135:5 [INFO] [stdout] | [INFO] [stdout] 135 | / fn poll_write( [INFO] [stdout] 136 | | self: std::pin::Pin<&mut Self>, [INFO] [stdout] 137 | | cx: &mut std::task::Context<'_>, [INFO] [stdout] 138 | | buf: &[u8], [INFO] [stdout] 139 | | ) -> std::task::Poll> { [INFO] [stdout] | |________________________________________________^ cannot return without recursing [INFO] [stdout] 140 | self.poll_write(cx, buf) [INFO] [stdout] | ------------------------ recursive call site [INFO] [stdout] | [INFO] [stdout] = help: a `loop` may express intention better if this is on purpose [INFO] [stdout] = note: `#[warn(unconditional_recursion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function cannot return without recursing [INFO] [stdout] --> src/textproto/writer.rs:143:5 [INFO] [stdout] | [INFO] [stdout] 143 | / fn poll_flush( [INFO] [stdout] 144 | | self: std::pin::Pin<&mut Self>, [INFO] [stdout] 145 | | cx: &mut std::task::Context<'_>, [INFO] [stdout] 146 | | ) -> std::task::Poll> { [INFO] [stdout] | |_____________________________________________^ cannot return without recursing [INFO] [stdout] 147 | self.poll_flush(cx) [INFO] [stdout] | ------------------- recursive call site [INFO] [stdout] | [INFO] [stdout] = help: a `loop` may express intention better if this is on purpose [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function cannot return without recursing [INFO] [stdout] --> src/textproto/writer.rs:150:5 [INFO] [stdout] | [INFO] [stdout] 150 | / fn poll_shutdown( [INFO] [stdout] 151 | | self: std::pin::Pin<&mut Self>, [INFO] [stdout] 152 | | cx: &mut std::task::Context<'_>, [INFO] [stdout] 153 | | ) -> std::task::Poll> { [INFO] [stdout] | |_____________________________________________^ cannot return without recursing [INFO] [stdout] 154 | self.poll_shutdown(cx) [INFO] [stdout] | ---------------------- recursive call site [INFO] [stdout] | [INFO] [stdout] = help: a `loop` may express intention better if this is on purpose [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ERR_TCP_AND_LMTP` is never used [INFO] [stdout] --> src/server.rs:20:7 [INFO] [stdout] | [INFO] [stdout] 20 | const ERR_TCP_AND_LMTP: &str = "smtp: cannot start LMTP server listening on a TCP socket"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `enhanced_code` is never read [INFO] [stdout] --> src/data.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct SMTPError { [INFO] [stdout] | --------- field in this struct [INFO] [stdout] 10 | code: u16, [INFO] [stdout] 11 | enhanced_code: EnhancedCode, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_temporary` is never used [INFO] [stdout] --> src/data.rs:65:8 [INFO] [stdout] | [INFO] [stdout] 36 | impl SMTPError { [INFO] [stdout] | -------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 65 | fn is_temporary(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ERR_THRESHOLD` is never used [INFO] [stdout] --> src/conn.rs:27:7 [INFO] [stdout] | [INFO] [stdout] 27 | const ERR_THRESHOLD: usize = 3; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `encode_xtext` is never used [INFO] [stdout] --> src/conn.rs:709:4 [INFO] [stdout] | [INFO] [stdout] 709 | fn encode_xtext(raw: String) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ERR_TOO_LONG_LINE` is never used [INFO] [stdout] --> src/lengthlimit_reader.rs:11:7 [INFO] [stdout] | [INFO] [stdout] 11 | const ERR_TOO_LONG_LINE: &str = "smtp: too long a line in input stream"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `r` and `cur_line_length` are never read [INFO] [stdout] --> src/lengthlimit_reader.rs:14:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct LineLimitReader { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 14 | pub r: R, [INFO] [stdout] | ^ [INFO] [stdout] ... [INFO] [stdout] 17 | pub cur_line_length: usize, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `read` is never used [INFO] [stdout] --> src/lengthlimit_reader.rs:29:14 [INFO] [stdout] | [INFO] [stdout] 20 | impl LineLimitReader { [INFO] [stdout] | --------------------------------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 29 | async fn read(&mut self, b: &mut [u8]) -> Result { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MyError` is never constructed [INFO] [stdout] --> src/textproto/textproto.rs:14:8 [INFO] [stdout] | [INFO] [stdout] 14 | struct MyError { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `ProtocolError` is never used [INFO] [stdout] --> src/textproto/textproto.rs:25:6 [INFO] [stdout] | [INFO] [stdout] 25 | type ProtocolError = String; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Begin` is never constructed [INFO] [stdout] --> src/textproto/writer.rs:45:5 [INFO] [stdout] | [INFO] [stdout] 44 | enum WState { [INFO] [stdout] | ------ variant in this enum [INFO] [stdout] 45 | Begin, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/textproto/pipeline.rs:68:9 [INFO] [stdout] | [INFO] [stdout] 68 | rx.await; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 68 | let _ = rx.await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/textproto/writer.rs:36:13 [INFO] [stdout] | [INFO] [stdout] 36 | (*dot).close().await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 36 | let _ = (*dot).close().await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `crnl` should have an upper case name [INFO] [stdout] --> src/textproto/writer.rs:41:7 [INFO] [stdout] | [INFO] [stdout] 41 | const crnl: [u8; 2] = [b'\r', b'\n']; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_upper_case_globals)]` on by default [INFO] [stdout] help: convert the identifier to upper case [INFO] [stdout] | [INFO] [stdout] 41 - const crnl: [u8; 2] = [b'\r', b'\n']; [INFO] [stdout] 41 + const CRNL: [u8; 2] = [b'\r', b'\n']; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `dotcrnl` should have an upper case name [INFO] [stdout] --> src/textproto/writer.rs:42:7 [INFO] [stdout] | [INFO] [stdout] 42 | const dotcrnl: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: convert the identifier to upper case [INFO] [stdout] | [INFO] [stdout] 42 - const dotcrnl: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stdout] 42 + const DOTCRNL: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling rustls-pemfile v1.0.2 [INFO] [stderr] Compiling rust-smtp-server v0.1.1 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `Session` [INFO] [stdout] --> src/server.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | Session, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::pin::Pin` [INFO] [stdout] --> src/server.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::pin::Pin; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::sync::Mutex` [INFO] [stdout] --> src/server.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use tokio::sync::Mutex; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AsyncReadExt` and `BufWriter` [INFO] [stdout] --> src/server.rs:15:23 [INFO] [stdout] | [INFO] [stdout] 15 | use tokio::io::{self, BufWriter, AsyncBufReadExt, AsyncReadExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `TcpStream` [INFO] [stdout] --> src/server.rs:16:31 [INFO] [stdout] | [INFO] [stdout] 16 | use tokio::net::{TcpListener, TcpStream}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::pin::Pin` [INFO] [stdout] --> src/conn.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::pin::Pin; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Context` and `Poll` [INFO] [stdout] --> src/conn.rs:8:17 [INFO] [stdout] | [INFO] [stdout] 8 | use std::task::{Context, Poll}; [INFO] [stdout] | ^^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `TcpSocket`, `tcp::ReadHalf`, and `tcp::WriteHalf` [INFO] [stdout] --> src/conn.rs:24:18 [INFO] [stdout] | [INFO] [stdout] 24 | use tokio::net::{tcp::ReadHalf, tcp::WriteHalf, TcpStream, TcpSocket}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `TlsAcceptor` and `rustls::ServerConfig` [INFO] [stdout] --> src/conn.rs:25:20 [INFO] [stdout] | [INFO] [stdout] 25 | use tokio_rustls::{rustls::ServerConfig, TlsAcceptor, server::TlsStream}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Arc` [INFO] [stdout] --> src/lengthlimit_reader.rs:1:17 [INFO] [stdout] | [INFO] [stdout] 1 | use std::sync::{Arc}; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ReadHalf` and `net::TcpStream` [INFO] [stdout] --> src/lengthlimit_reader.rs:6:18 [INFO] [stdout] | [INFO] [stdout] 6 | use tokio::{io::{ReadHalf, AsyncRead, AsyncReadExt}, net::TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::stream::Stream` [INFO] [stdout] --> src/lengthlimit_reader.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use crate::stream::Stream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::Mutex` [INFO] [stdout] --> src/lengthlimit_reader.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::sync::Mutex; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::stream::Stream` [INFO] [stdout] --> src/textproto/textproto.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::stream::Stream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `IpAddr`, `Ipv4Addr`, and `SocketAddr` [INFO] [stdout] --> src/textproto/textproto.rs:4:16 [INFO] [stdout] | [INFO] [stdout] 4 | use std::net::{IpAddr, Ipv4Addr, SocketAddr}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::pin::Pin` [INFO] [stdout] --> src/textproto/textproto.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::pin::Pin; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Arc` and `Mutex` [INFO] [stdout] --> src/textproto/textproto.rs:6:17 [INFO] [stdout] | [INFO] [stdout] 6 | use std::sync::{Arc, Mutex}; [INFO] [stdout] | ^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::net::TcpStream` [INFO] [stdout] --> src/textproto/textproto.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use tokio::net::TcpStream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AsyncBufReadExt`, `AsyncWriteExt`, and `BufReader` [INFO] [stdout] --> src/textproto/textproto.rs:8:40 [INFO] [stdout] | [INFO] [stdout] 8 | use tokio::io::{AsyncWrite, AsyncRead, AsyncWriteExt, AsyncBufReadExt, BufReader}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Arc` and `Mutex` [INFO] [stdout] --> src/textproto/writer.rs:1:17 [INFO] [stdout] | [INFO] [stdout] 1 | use std::sync::{Arc, Mutex}; [INFO] [stdout] | ^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/server.rs:75:13 [INFO] [stdout] | [INFO] [stdout] 75 | let mut server = Arc::new(self); [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/server.rs:79:25 [INFO] [stdout] | [INFO] [stdout] 79 | let mut server = server.clone(); [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `e` [INFO] [stdout] --> src/textproto/writer.rs:98:24 [INFO] [stdout] | [INFO] [stdout] 98 | if let Err(e) = self.w.w.write_u8(c).await { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_e` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `username` [INFO] [stdout] --> src/backend.rs:50:30 [INFO] [stdout] | [INFO] [stdout] 50 | fn auth_plain(&mut self, username: &str, password: &str) -> Result<()> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_username` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `password` [INFO] [stdout] --> src/backend.rs:50:46 [INFO] [stdout] | [INFO] [stdout] 50 | fn auth_plain(&mut self, username: &str, password: &str) -> Result<()> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_password` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/data.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | let mut this = self.get_mut(); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function cannot return without recursing [INFO] [stdout] --> src/textproto/writer.rs:135:5 [INFO] [stdout] | [INFO] [stdout] 135 | / fn poll_write( [INFO] [stdout] 136 | | self: std::pin::Pin<&mut Self>, [INFO] [stdout] 137 | | cx: &mut std::task::Context<'_>, [INFO] [stdout] 138 | | buf: &[u8], [INFO] [stdout] 139 | | ) -> std::task::Poll> { [INFO] [stdout] | |________________________________________________^ cannot return without recursing [INFO] [stdout] 140 | self.poll_write(cx, buf) [INFO] [stdout] | ------------------------ recursive call site [INFO] [stdout] | [INFO] [stdout] = help: a `loop` may express intention better if this is on purpose [INFO] [stdout] = note: `#[warn(unconditional_recursion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function cannot return without recursing [INFO] [stdout] --> src/textproto/writer.rs:143:5 [INFO] [stdout] | [INFO] [stdout] 143 | / fn poll_flush( [INFO] [stdout] 144 | | self: std::pin::Pin<&mut Self>, [INFO] [stdout] 145 | | cx: &mut std::task::Context<'_>, [INFO] [stdout] 146 | | ) -> std::task::Poll> { [INFO] [stdout] | |_____________________________________________^ cannot return without recursing [INFO] [stdout] 147 | self.poll_flush(cx) [INFO] [stdout] | ------------------- recursive call site [INFO] [stdout] | [INFO] [stdout] = help: a `loop` may express intention better if this is on purpose [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function cannot return without recursing [INFO] [stdout] --> src/textproto/writer.rs:150:5 [INFO] [stdout] | [INFO] [stdout] 150 | / fn poll_shutdown( [INFO] [stdout] 151 | | self: std::pin::Pin<&mut Self>, [INFO] [stdout] 152 | | cx: &mut std::task::Context<'_>, [INFO] [stdout] 153 | | ) -> std::task::Poll> { [INFO] [stdout] | |_____________________________________________^ cannot return without recursing [INFO] [stdout] 154 | self.poll_shutdown(cx) [INFO] [stdout] | ---------------------- recursive call site [INFO] [stdout] | [INFO] [stdout] = help: a `loop` may express intention better if this is on purpose [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ERR_TCP_AND_LMTP` is never used [INFO] [stdout] --> src/server.rs:20:7 [INFO] [stdout] | [INFO] [stdout] 20 | const ERR_TCP_AND_LMTP: &str = "smtp: cannot start LMTP server listening on a TCP socket"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `enhanced_code` is never read [INFO] [stdout] --> src/data.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct SMTPError { [INFO] [stdout] | --------- field in this struct [INFO] [stdout] 10 | code: u16, [INFO] [stdout] 11 | enhanced_code: EnhancedCode, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_temporary` is never used [INFO] [stdout] --> src/data.rs:65:8 [INFO] [stdout] | [INFO] [stdout] 36 | impl SMTPError { [INFO] [stdout] | -------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 65 | fn is_temporary(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ERR_THRESHOLD` is never used [INFO] [stdout] --> src/conn.rs:27:7 [INFO] [stdout] | [INFO] [stdout] 27 | const ERR_THRESHOLD: usize = 3; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `encode_xtext` is never used [INFO] [stdout] --> src/conn.rs:709:4 [INFO] [stdout] | [INFO] [stdout] 709 | fn encode_xtext(raw: String) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ERR_TOO_LONG_LINE` is never used [INFO] [stdout] --> src/lengthlimit_reader.rs:11:7 [INFO] [stdout] | [INFO] [stdout] 11 | const ERR_TOO_LONG_LINE: &str = "smtp: too long a line in input stream"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `r` and `cur_line_length` are never read [INFO] [stdout] --> src/lengthlimit_reader.rs:14:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct LineLimitReader { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 14 | pub r: R, [INFO] [stdout] | ^ [INFO] [stdout] ... [INFO] [stdout] 17 | pub cur_line_length: usize, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `read` is never used [INFO] [stdout] --> src/lengthlimit_reader.rs:29:14 [INFO] [stdout] | [INFO] [stdout] 20 | impl LineLimitReader { [INFO] [stdout] | --------------------------------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 29 | async fn read(&mut self, b: &mut [u8]) -> Result { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MyError` is never constructed [INFO] [stdout] --> src/textproto/textproto.rs:14:8 [INFO] [stdout] | [INFO] [stdout] 14 | struct MyError { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `ProtocolError` is never used [INFO] [stdout] --> src/textproto/textproto.rs:25:6 [INFO] [stdout] | [INFO] [stdout] 25 | type ProtocolError = String; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Begin` is never constructed [INFO] [stdout] --> src/textproto/writer.rs:45:5 [INFO] [stdout] | [INFO] [stdout] 44 | enum WState { [INFO] [stdout] | ------ variant in this enum [INFO] [stdout] 45 | Begin, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/textproto/pipeline.rs:68:9 [INFO] [stdout] | [INFO] [stdout] 68 | rx.await; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 68 | let _ = rx.await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/textproto/writer.rs:36:13 [INFO] [stdout] | [INFO] [stdout] 36 | (*dot).close().await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 36 | let _ = (*dot).close().await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `crnl` should have an upper case name [INFO] [stdout] --> src/textproto/writer.rs:41:7 [INFO] [stdout] | [INFO] [stdout] 41 | const crnl: [u8; 2] = [b'\r', b'\n']; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_upper_case_globals)]` on by default [INFO] [stdout] help: convert the identifier to upper case [INFO] [stdout] | [INFO] [stdout] 41 - const crnl: [u8; 2] = [b'\r', b'\n']; [INFO] [stdout] 41 + const CRNL: [u8; 2] = [b'\r', b'\n']; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `dotcrnl` should have an upper case name [INFO] [stdout] --> src/textproto/writer.rs:42:7 [INFO] [stdout] | [INFO] [stdout] 42 | const dotcrnl: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: convert the identifier to upper case [INFO] [stdout] | [INFO] [stdout] 42 - const dotcrnl: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stdout] 42 + const DOTCRNL: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 2.94s [INFO] running `Command { std: "docker" "inspect" "93f80bb8ae676fd26a54dc02938a862adfbc0ce7c7fdaca9d2b470612e44cc41", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "93f80bb8ae676fd26a54dc02938a862adfbc0ce7c7fdaca9d2b470612e44cc41", kill_on_drop: false }` [INFO] [stdout] 93f80bb8ae676fd26a54dc02938a862adfbc0ce7c7fdaca9d2b470612e44cc41 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+1.90.0" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 7bf37b527d12702dc7c7593bfdd56b4b5cbe1601229721dce391de507ccc5f1e [INFO] running `Command { std: "docker" "start" "-a" "7bf37b527d12702dc7c7593bfdd56b4b5cbe1601229721dce391de507ccc5f1e", kill_on_drop: false }` [INFO] [stderr] warning: file `/opt/rustwide/workdir/examples/with_starttls_support.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `with_starttls_support` [INFO] [stderr] * `example` target `with_starttls_support` [INFO] [stderr] warning: file `/opt/rustwide/workdir/examples/simple.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `simple` [INFO] [stderr] * `example` target `simple` [INFO] [stderr] warning: unused import: `Session` [INFO] [stderr] --> src/server.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | Session, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_imports)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::pin::Pin` [INFO] [stderr] --> src/server.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use std::pin::Pin; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `tokio::sync::Mutex` [INFO] [stderr] --> src/server.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use tokio::sync::Mutex; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncReadExt` and `BufWriter` [INFO] [stderr] --> src/server.rs:15:23 [INFO] [stderr] | [INFO] [stderr] 15 | use tokio::io::{self, BufWriter, AsyncBufReadExt, AsyncReadExt}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `TcpStream` [INFO] [stderr] --> src/server.rs:16:31 [INFO] [stderr] | [INFO] [stderr] 16 | use tokio::net::{TcpListener, TcpStream}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::pin::Pin` [INFO] [stderr] --> src/conn.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use std::pin::Pin; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Context` and `Poll` [INFO] [stderr] --> src/conn.rs:8:17 [INFO] [stderr] | [INFO] [stderr] 8 | use std::task::{Context, Poll}; [INFO] [stderr] | ^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `TcpSocket`, `tcp::ReadHalf`, and `tcp::WriteHalf` [INFO] [stderr] --> src/conn.rs:24:18 [INFO] [stderr] | [INFO] [stderr] 24 | use tokio::net::{tcp::ReadHalf, tcp::WriteHalf, TcpStream, TcpSocket}; [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `TlsAcceptor` and `rustls::ServerConfig` [INFO] [stderr] --> src/conn.rs:25:20 [INFO] [stderr] | [INFO] [stderr] 25 | use tokio_rustls::{rustls::ServerConfig, TlsAcceptor, server::TlsStream}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Arc` [INFO] [stderr] --> src/lengthlimit_reader.rs:1:17 [INFO] [stderr] | [INFO] [stderr] 1 | use std::sync::{Arc}; [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ReadHalf` and `net::TcpStream` [INFO] [stderr] --> src/lengthlimit_reader.rs:6:18 [INFO] [stderr] | [INFO] [stderr] 6 | use tokio::{io::{ReadHalf, AsyncRead, AsyncReadExt}, net::TcpStream}; [INFO] [stderr] | ^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `crate::stream::Stream` [INFO] [stderr] --> src/lengthlimit_reader.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use crate::stream::Stream; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::sync::Mutex` [INFO] [stderr] --> src/lengthlimit_reader.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use std::sync::Mutex; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `crate::stream::Stream` [INFO] [stderr] --> src/textproto/textproto.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use crate::stream::Stream; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `IpAddr`, `Ipv4Addr`, and `SocketAddr` [INFO] [stderr] --> src/textproto/textproto.rs:4:16 [INFO] [stderr] | [INFO] [stderr] 4 | use std::net::{IpAddr, Ipv4Addr, SocketAddr}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::pin::Pin` [INFO] [stderr] --> src/textproto/textproto.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use std::pin::Pin; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Arc` and `Mutex` [INFO] [stderr] --> src/textproto/textproto.rs:6:17 [INFO] [stderr] | [INFO] [stderr] 6 | use std::sync::{Arc, Mutex}; [INFO] [stderr] | ^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `tokio::net::TcpStream` [INFO] [stderr] --> src/textproto/textproto.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | use tokio::net::TcpStream; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `AsyncBufReadExt`, `AsyncWriteExt`, and `BufReader` [INFO] [stderr] --> src/textproto/textproto.rs:8:40 [INFO] [stderr] | [INFO] [stderr] 8 | use tokio::io::{AsyncWrite, AsyncRead, AsyncWriteExt, AsyncBufReadExt, BufReader}; [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Arc` and `Mutex` [INFO] [stderr] --> src/textproto/writer.rs:1:17 [INFO] [stderr] | [INFO] [stderr] 1 | use std::sync::{Arc, Mutex}; [INFO] [stderr] | ^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/server.rs:75:13 [INFO] [stderr] | [INFO] [stderr] 75 | let mut server = Arc::new(self); [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_mut)]` on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/server.rs:79:25 [INFO] [stderr] | [INFO] [stderr] 79 | let mut server = server.clone(); [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/textproto/writer.rs:98:24 [INFO] [stderr] | [INFO] [stderr] 98 | if let Err(e) = self.w.w.write_u8(c).await { [INFO] [stderr] | ^ help: if this is intentional, prefix it with an underscore: `_e` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `username` [INFO] [stderr] --> src/backend.rs:50:30 [INFO] [stderr] | [INFO] [stderr] 50 | fn auth_plain(&mut self, username: &str, password: &str) -> Result<()> { [INFO] [stderr] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_username` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `password` [INFO] [stderr] --> src/backend.rs:50:46 [INFO] [stderr] | [INFO] [stderr] 50 | fn auth_plain(&mut self, username: &str, password: &str) -> Result<()> { [INFO] [stderr] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_password` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/data.rs:94:13 [INFO] [stderr] | [INFO] [stderr] 94 | let mut this = self.get_mut(); [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: function cannot return without recursing [INFO] [stderr] --> src/textproto/writer.rs:135:5 [INFO] [stderr] | [INFO] [stderr] 135 | / fn poll_write( [INFO] [stderr] 136 | | self: std::pin::Pin<&mut Self>, [INFO] [stderr] 137 | | cx: &mut std::task::Context<'_>, [INFO] [stderr] 138 | | buf: &[u8], [INFO] [stderr] 139 | | ) -> std::task::Poll> { [INFO] [stderr] | |________________________________________________^ cannot return without recursing [INFO] [stderr] 140 | self.poll_write(cx, buf) [INFO] [stderr] | ------------------------ recursive call site [INFO] [stderr] | [INFO] [stderr] = help: a `loop` may express intention better if this is on purpose [INFO] [stderr] = note: `#[warn(unconditional_recursion)]` on by default [INFO] [stderr] [INFO] [stderr] warning: function cannot return without recursing [INFO] [stderr] --> src/textproto/writer.rs:143:5 [INFO] [stderr] | [INFO] [stderr] 143 | / fn poll_flush( [INFO] [stderr] 144 | | self: std::pin::Pin<&mut Self>, [INFO] [stderr] 145 | | cx: &mut std::task::Context<'_>, [INFO] [stderr] 146 | | ) -> std::task::Poll> { [INFO] [stderr] | |_____________________________________________^ cannot return without recursing [INFO] [stderr] 147 | self.poll_flush(cx) [INFO] [stderr] | ------------------- recursive call site [INFO] [stderr] | [INFO] [stderr] = help: a `loop` may express intention better if this is on purpose [INFO] [stderr] [INFO] [stderr] warning: function cannot return without recursing [INFO] [stderr] --> src/textproto/writer.rs:150:5 [INFO] [stderr] | [INFO] [stderr] 150 | / fn poll_shutdown( [INFO] [stderr] 151 | | self: std::pin::Pin<&mut Self>, [INFO] [stderr] 152 | | cx: &mut std::task::Context<'_>, [INFO] [stderr] 153 | | ) -> std::task::Poll> { [INFO] [stderr] | |_____________________________________________^ cannot return without recursing [INFO] [stderr] 154 | self.poll_shutdown(cx) [INFO] [stderr] | ---------------------- recursive call site [INFO] [stderr] | [INFO] [stderr] = help: a `loop` may express intention better if this is on purpose [INFO] [stderr] [INFO] [stderr] warning: constant `ERR_TCP_AND_LMTP` is never used [INFO] [stderr] --> src/server.rs:20:7 [INFO] [stderr] | [INFO] [stderr] 20 | const ERR_TCP_AND_LMTP: &str = "smtp: cannot start LMTP server listening on a TCP socket"; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(dead_code)]` on by default [INFO] [stderr] [INFO] [stderr] warning: field `enhanced_code` is never read [INFO] [stderr] --> src/data.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 9 | pub struct SMTPError { [INFO] [stderr] | --------- field in this struct [INFO] [stderr] 10 | code: u16, [INFO] [stderr] 11 | enhanced_code: EnhancedCode, [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method `is_temporary` is never used [INFO] [stderr] --> src/data.rs:65:8 [INFO] [stderr] | [INFO] [stderr] 36 | impl SMTPError { [INFO] [stderr] | -------------- method in this implementation [INFO] [stderr] ... [INFO] [stderr] 65 | fn is_temporary(&self) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `ERR_THRESHOLD` is never used [INFO] [stderr] --> src/conn.rs:27:7 [INFO] [stderr] | [INFO] [stderr] 27 | const ERR_THRESHOLD: usize = 3; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `encode_xtext` is never used [INFO] [stderr] --> src/conn.rs:709:4 [INFO] [stderr] | [INFO] [stderr] 709 | fn encode_xtext(raw: String) -> String { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `ERR_TOO_LONG_LINE` is never used [INFO] [stderr] --> src/lengthlimit_reader.rs:11:7 [INFO] [stderr] | [INFO] [stderr] 11 | const ERR_TOO_LONG_LINE: &str = "smtp: too long a line in input stream"; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: fields `r` and `cur_line_length` are never read [INFO] [stderr] --> src/lengthlimit_reader.rs:14:9 [INFO] [stderr] | [INFO] [stderr] 13 | pub struct LineLimitReader { [INFO] [stderr] | --------------- fields in this struct [INFO] [stderr] 14 | pub r: R, [INFO] [stderr] | ^ [INFO] [stderr] ... [INFO] [stderr] 17 | pub cur_line_length: usize, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method `read` is never used [INFO] [stderr] --> src/lengthlimit_reader.rs:29:14 [INFO] [stderr] | [INFO] [stderr] 20 | impl LineLimitReader { [INFO] [stderr] | --------------------------------------------- method in this implementation [INFO] [stderr] ... [INFO] [stderr] 29 | async fn read(&mut self, b: &mut [u8]) -> Result { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `MyError` is never constructed [INFO] [stderr] --> src/textproto/textproto.rs:14:8 [INFO] [stderr] | [INFO] [stderr] 14 | struct MyError { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: type alias `ProtocolError` is never used [INFO] [stderr] --> src/textproto/textproto.rs:25:6 [INFO] [stderr] | [INFO] [stderr] 25 | type ProtocolError = String; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `Begin` is never constructed [INFO] [stderr] --> src/textproto/writer.rs:45:5 [INFO] [stderr] | [INFO] [stderr] 44 | enum WState { [INFO] [stderr] | ------ variant in this enum [INFO] [stderr] 45 | Begin, [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused `Result` that must be used [INFO] [stderr] --> src/textproto/pipeline.rs:68:9 [INFO] [stderr] | [INFO] [stderr] 68 | rx.await; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] = note: `#[warn(unused_must_use)]` on by default [INFO] [stderr] help: use `let _ = ...` to ignore the resulting value [INFO] [stderr] | [INFO] [stderr] 68 | let _ = rx.await; [INFO] [stderr] | +++++++ [INFO] [stderr] [INFO] [stderr] warning: unused `Result` that must be used [INFO] [stderr] --> src/textproto/writer.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | (*dot).close().await; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] help: use `let _ = ...` to ignore the resulting value [INFO] [stderr] | [INFO] [stderr] 36 | let _ = (*dot).close().await; [INFO] [stderr] | +++++++ [INFO] [stderr] [INFO] [stderr] warning: constant `crnl` should have an upper case name [INFO] [stderr] --> src/textproto/writer.rs:41:7 [INFO] [stderr] | [INFO] [stderr] 41 | const crnl: [u8; 2] = [b'\r', b'\n']; [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(non_upper_case_globals)]` on by default [INFO] [stderr] help: convert the identifier to upper case [INFO] [stderr] | [INFO] [stderr] 41 - const crnl: [u8; 2] = [b'\r', b'\n']; [INFO] [stderr] 41 + const CRNL: [u8; 2] = [b'\r', b'\n']; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: constant `dotcrnl` should have an upper case name [INFO] [stderr] --> src/textproto/writer.rs:42:7 [INFO] [stderr] | [INFO] [stderr] 42 | const dotcrnl: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] help: convert the identifier to upper case [INFO] [stderr] | [INFO] [stderr] 42 - const dotcrnl: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stderr] 42 + const DOTCRNL: [u8; 3] = [b'.', b'\r', b'\n']; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `rust-smtp-server` (lib) generated 44 warnings (run `cargo fix --lib -p rust-smtp-server` to apply 25 suggestions) [INFO] [stderr] warning: `rust-smtp-server` (lib test) generated 44 warnings (44 duplicates) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.27s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/rust_smtp_server-f1e957c2dd322dab) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running unittests examples/simple.rs (/opt/rustwide/target/debug/deps/simple-e650a4d66af26e6d) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running unittests examples/with_starttls_support.rs (/opt/rustwide/target/debug/deps/with_starttls_support-fe5b0516f1c57279) [INFO] [stderr] Doc-tests rust_smtp_server [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "7bf37b527d12702dc7c7593bfdd56b4b5cbe1601229721dce391de507ccc5f1e", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "7bf37b527d12702dc7c7593bfdd56b4b5cbe1601229721dce391de507ccc5f1e", kill_on_drop: false }` [INFO] [stdout] 7bf37b527d12702dc7c7593bfdd56b4b5cbe1601229721dce391de507ccc5f1e