[INFO] crate armorlib 0.2.3 is already in cache [INFO] extracting crate armorlib 0.2.3 into work/ex/clippy-test-run/sources/stable/reg/armorlib/0.2.3 [INFO] extracting crate armorlib 0.2.3 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/armorlib/0.2.3 [INFO] validating manifest of armorlib-0.2.3 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of armorlib-0.2.3 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing armorlib-0.2.3 [INFO] finished frobbing armorlib-0.2.3 [INFO] frobbed toml for armorlib-0.2.3 written to work/ex/clippy-test-run/sources/stable/reg/armorlib/0.2.3/Cargo.toml [INFO] started frobbing armorlib-0.2.3 [INFO] finished frobbing armorlib-0.2.3 [INFO] frobbed toml for armorlib-0.2.3 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/armorlib/0.2.3/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting armorlib-0.2.3 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/armorlib/0.2.3:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 733148a7313f25e57a1fef8435ccb5e0810432fc15907e2210b8be892d83703b [INFO] running `"docker" "start" "-a" "733148a7313f25e57a1fef8435ccb5e0810432fc15907e2210b8be892d83703b"` [INFO] [stderr] Checking kamadak-exif v0.3.1 [INFO] [stderr] Checking clap v2.29.4 [INFO] [stderr] Checking armorlib v0.2.3 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/coordinator.rs:104:9 [INFO] [stderr] | [INFO] [stderr] 104 | binary_object: binary_object, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `binary_object` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/coordinator.rs:105:9 [INFO] [stderr] | [INFO] [stderr] 105 | filetype: filetype, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `filetype` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/binary_object.rs:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | data: data, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/scan_object.rs:128:13 [INFO] [stderr] | [INFO] [stderr] 128 | metadata: metadata, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `metadata` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/coordinator.rs:104:9 [INFO] [stderr] | [INFO] [stderr] 104 | binary_object: binary_object, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `binary_object` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/coordinator.rs:105:9 [INFO] [stderr] | [INFO] [stderr] 105 | filetype: filetype, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `filetype` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/binary_object.rs:23:13 [INFO] [stderr] | [INFO] [stderr] 23 | data: data, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/scan_object.rs:128:13 [INFO] [stderr] | [INFO] [stderr] 128 | metadata: metadata, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `metadata` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/scan_module.rs:29:9 [INFO] [stderr] | [INFO] [stderr] 29 | return self.info().0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.info().0` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/scan_module.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | return self.info().1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.info().1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/scan_module.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/preprocessor.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | return self.info().0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.info().0` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/preprocessor.rs:33:9 [INFO] [stderr] | [INFO] [stderr] 33 | return self.info().1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.info().1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/preprocessors/filetype.rs:103:5 [INFO] [stderr] | [INFO] [stderr] 103 | return filetypes; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `filetypes` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/preprocessors/text.rs:107:17 [INFO] [stderr] | [INFO] [stderr] 107 | return String::from_utf16_lossy(u8s.as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `String::from_utf16_lossy(u8s.as_slice())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/scan_modules/exif.rs:44:13 [INFO] [stderr] | [INFO] [stderr] 44 | / if tag.default_value().is_some() { [INFO] [stderr] 45 | | if format!("{}", value.display_as(*tag)) [INFO] [stderr] 46 | | == format!("{}", tag.default_value().unwrap().display_as(*tag)) [INFO] [stderr] 47 | | { [INFO] [stderr] 48 | | continue; // has default value, no need to worry [INFO] [stderr] 49 | | } [INFO] [stderr] 50 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 44 | if tag.default_value().is_some() && format!("{}", value.display_as(*tag)) [INFO] [stderr] 45 | == format!("{}", tag.default_value().unwrap().display_as(*tag)) { [INFO] [stderr] 46 | continue; // has default value, no need to worry [INFO] [stderr] 47 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/scan_module.rs:29:9 [INFO] [stderr] | [INFO] [stderr] 29 | return self.info().0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.info().0` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/scan_module.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | return self.info().1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.info().1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/scan_module.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/preprocessor.rs:28:9 [INFO] [stderr] | [INFO] [stderr] 28 | return self.info().0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.info().0` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/preprocessor.rs:33:9 [INFO] [stderr] | [INFO] [stderr] 33 | return self.info().1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.info().1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/util.rs:109:62 [INFO] [stderr] | [INFO] [stderr] 109 | assert_eq!(u8s_to_u32(first, second, third, fourth), 0x01234567_u32); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0x0123_4567_u32` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/preprocessors/filetype.rs:103:5 [INFO] [stderr] | [INFO] [stderr] 103 | return filetypes; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `filetypes` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/preprocessors/text.rs:107:17 [INFO] [stderr] | [INFO] [stderr] 107 | return String::from_utf16_lossy(u8s.as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `String::from_utf16_lossy(u8s.as_slice())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/scan_modules/exif.rs:44:13 [INFO] [stderr] | [INFO] [stderr] 44 | / if tag.default_value().is_some() { [INFO] [stderr] 45 | | if format!("{}", value.display_as(*tag)) [INFO] [stderr] 46 | | == format!("{}", tag.default_value().unwrap().display_as(*tag)) [INFO] [stderr] 47 | | { [INFO] [stderr] 48 | | continue; // has default value, no need to worry [INFO] [stderr] 49 | | } [INFO] [stderr] 50 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 44 | if tag.default_value().is_some() && format!("{}", value.display_as(*tag)) [INFO] [stderr] 45 | == format!("{}", tag.default_value().unwrap().display_as(*tag)) { [INFO] [stderr] 46 | continue; // has default value, no need to worry [INFO] [stderr] 47 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/coordinator.rs:75:16 [INFO] [stderr] | [INFO] [stderr] 75 | || preprocessor.name() == &String::from("filetype") [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^------------------------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `String::from("filetype")` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/errors.rs:33:31 [INFO] [stderr] | [INFO] [stderr] 33 | let message: String = match self { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 34 | | // TODO: are these messages idiomatic? See https://github.com/milesmcc/ArmorLib/issues/4 [INFO] [stderr] 35 | | &ArmorlibError::UnknownProcessingError(ref msg) => { [INFO] [stderr] 36 | | format!("an unknown processing error occured: {}", msg) [INFO] [stderr] ... | [INFO] [stderr] 49 | | } [INFO] [stderr] 50 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 33 | let message: String = match *self { [INFO] [stderr] 34 | // TODO: are these messages idiomatic? See https://github.com/milesmcc/ArmorLib/issues/4 [INFO] [stderr] 35 | ArmorlibError::UnknownProcessingError(ref msg) => { [INFO] [stderr] 36 | format!("an unknown processing error occured: {}", msg) [INFO] [stderr] 37 | } [INFO] [stderr] 38 | ArmorlibError::ParseError(ref msg) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/errors.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | / match self { [INFO] [stderr] 59 | | &ArmorlibError::UnknownProcessingError(_) => "an unknown processing error occured", [INFO] [stderr] 60 | | &ArmorlibError::ParseError(_) => "an error occured while parsing data", [INFO] [stderr] 61 | | &ArmorlibError::MissingPreprocessor(_) => "unable to find the preprocessor", [INFO] [stderr] 62 | | &ArmorlibError::MissingMetadata(_) => "unable to find the metadata", [INFO] [stderr] 63 | | &ArmorlibError::ReadFileError(_) => "unable to read the file", [INFO] [stderr] 64 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 58 | match *self { [INFO] [stderr] 59 | ArmorlibError::UnknownProcessingError(_) => "an unknown processing error occured", [INFO] [stderr] 60 | ArmorlibError::ParseError(_) => "an error occured while parsing data", [INFO] [stderr] 61 | ArmorlibError::MissingPreprocessor(_) => "unable to find the preprocessor", [INFO] [stderr] 62 | ArmorlibError::MissingMetadata(_) => "unable to find the metadata", [INFO] [stderr] 63 | ArmorlibError::ReadFileError(_) => "unable to read the file", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/util.rs:28:56 [INFO] [stderr] | [INFO] [stderr] 28 | for byte in String::from(hex).to_uppercase().split(" ") { [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:47:22 [INFO] [stderr] | [INFO] [stderr] 47 | let first: u16 = (first as u16) << 8; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u16::from(first)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:48:23 [INFO] [stderr] | [INFO] [stderr] 48 | let second: u16 = second as u16; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::from(second)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:69:22 [INFO] [stderr] | [INFO] [stderr] 69 | let first: u32 = (first as u32) << 24; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(first)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:70:23 [INFO] [stderr] | [INFO] [stderr] 70 | let second: u32 = (second as u32) << 16; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `u32::from(second)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:71:22 [INFO] [stderr] | [INFO] [stderr] 71 | let third: u32 = (third as u32) << 8; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(third)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:72:23 [INFO] [stderr] | [INFO] [stderr] 72 | let fourth: u32 = fourth as u32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u32::from(fourth)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/preprocessors/filetype.rs:68:48 [INFO] [stderr] | [INFO] [stderr] 68 | let pattern_hex: Vec<&str> = pattern.split(" ").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> src/preprocessors/filetype.rs:74:19 [INFO] [stderr] | [INFO] [stderr] 74 | if pat == String::from("??") { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `"??"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cmp_owned)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stderr] [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> src/preprocessors/filetype.rs:79:12 [INFO] [stderr] | [INFO] [stderr] 79 | if String::from(byte_str) != pat { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `byte_str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/preprocessors/filetype.rs:79:12 [INFO] [stderr] | [INFO] [stderr] 79 | if String::from(byte_str) != pat { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `byte_str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/preprocessors/text.rs:44:20 [INFO] [stderr] | [INFO] [stderr] 44 | pub fn is_text(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/preprocessors/text.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | / match self { [INFO] [stderr] 46 | | &Encoding::Ascii => true, [INFO] [stderr] 47 | | &Encoding::Utf8 => true, [INFO] [stderr] 48 | | &Encoding::Utf16 => true, [INFO] [stderr] 49 | | &Encoding::Utf32 => true, [INFO] [stderr] 50 | | _ => false, [INFO] [stderr] 51 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 45 | match *self { [INFO] [stderr] 46 | Encoding::Ascii => true, [INFO] [stderr] 47 | Encoding::Utf8 => true, [INFO] [stderr] 48 | Encoding::Utf16 => true, [INFO] [stderr] 49 | Encoding::Utf32 => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/preprocessors/text.rs:59:12 [INFO] [stderr] | [INFO] [stderr] 59 | if length <= &0_usize { [INFO] [stderr] | ^^^^^^^^^^-------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `0_usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/preprocessors/text.rs:63:12 [INFO] [stderr] | [INFO] [stderr] 63 | if length > &4_usize && data[0..4] == [0xFF_u8, 0xFE_u8, 0x00_u8, 0x00_u8] { [INFO] [stderr] | ^^^^^^^^^-------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `4_usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/preprocessors/text.rs:66:19 [INFO] [stderr] | [INFO] [stderr] 66 | } else if length > &2_usize && data[0..2] == [0xFF_u8, 0xFE_u8] { [INFO] [stderr] | ^^^^^^^^^-------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `2_usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/preprocessors/text.rs:69:19 [INFO] [stderr] | [INFO] [stderr] 69 | } else if length > &3_usize && data[0..3] == [0xEF_u8, 0xBB_u8, 0xBF_u8] { [INFO] [stderr] | ^^^^^^^^^-------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `3_usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/preprocessors/text.rs:87:25 [INFO] [stderr] | [INFO] [stderr] 87 | pub fn extract_text(&self, binary_object: &BinaryObject) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/preprocessors/text.rs:91:9 [INFO] [stderr] | [INFO] [stderr] 91 | / match self { [INFO] [stderr] 92 | | &Encoding::Ascii => String::from(String::from_utf8_lossy(data.as_slice()).to_owned()), [INFO] [stderr] 93 | | &Encoding::Utf16 => { [INFO] [stderr] 94 | | let mut len = data.len(); [INFO] [stderr] ... | [INFO] [stderr] 132 | | _ => String::from_utf8_lossy(data_slice).to_string(), // binaries and other files may contain utf8 data, as well as utf8 itself [INFO] [stderr] 133 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 91 | match *self { [INFO] [stderr] 92 | Encoding::Ascii => String::from(String::from_utf8_lossy(data.as_slice()).to_owned()), [INFO] [stderr] 93 | Encoding::Utf16 => { [INFO] [stderr] 94 | let mut len = data.len(); [INFO] [stderr] 95 | if len % 2 != 0 { [INFO] [stderr] 96 | len -= 1; // truncate the last byte if invalid [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/preprocessors/text.rs:125:21 [INFO] [stderr] | [INFO] [stderr] 125 | / match char::from_u32(u) { [INFO] [stderr] 126 | | Some(character) => string.push(character), [INFO] [stderr] 127 | | None => {}, [INFO] [stderr] 128 | | } [INFO] [stderr] | |_____________________^ help: try this: `if let Some(character) = char::from_u32(u) { string.push(character) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/scan_modules/unicode_watermark.rs:67:13 [INFO] [stderr] | [INFO] [stderr] 67 | / match watermarks.get(&character) { [INFO] [stderr] 68 | | Some(warn_text) => { [INFO] [stderr] 69 | | findings.push(Finding { [INFO] [stderr] 70 | | title: String::from(*warn_text), [INFO] [stderr] ... | [INFO] [stderr] 82 | | _ => {} [INFO] [stderr] 83 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 67 | if let Some(warn_text) = watermarks.get(&character) { [INFO] [stderr] 68 | findings.push(Finding { [INFO] [stderr] 69 | title: String::from(*warn_text), [INFO] [stderr] 70 | description: format!( [INFO] [stderr] 71 | "found suspicious character at index {}: \"{}\"", [INFO] [stderr] 72 | i, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/scan_modules/mod.rs:62:16 [INFO] [stderr] | [INFO] [stderr] 62 | if &scan_object.filetype.is_some() == &true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 62 | if scan_object.filetype.is_some() == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/scan_modules/mod.rs:63:47 [INFO] [stderr] | [INFO] [stderr] 63 | let given_filetype: &String = match &scan_object.filetype.as_ref() { [INFO] [stderr] | _______________________________________________^ [INFO] [stderr] 64 | | &Some(filetype) => &filetype, [INFO] [stderr] 65 | | &None => unreachable!(), [INFO] [stderr] 66 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 63 | let given_filetype: &String = match scan_object.filetype.as_ref() { [INFO] [stderr] 64 | Some(filetype) => &filetype, [INFO] [stderr] 65 | None => unreachable!(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/coordinator.rs:75:16 [INFO] [stderr] | [INFO] [stderr] 75 | || preprocessor.name() == &String::from("filetype") [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^------------------------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `String::from("filetype")` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/errors.rs:33:31 [INFO] [stderr] | [INFO] [stderr] 33 | let message: String = match self { [INFO] [stderr] | _______________________________^ [INFO] [stderr] 34 | | // TODO: are these messages idiomatic? See https://github.com/milesmcc/ArmorLib/issues/4 [INFO] [stderr] 35 | | &ArmorlibError::UnknownProcessingError(ref msg) => { [INFO] [stderr] 36 | | format!("an unknown processing error occured: {}", msg) [INFO] [stderr] ... | [INFO] [stderr] 49 | | } [INFO] [stderr] 50 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 33 | let message: String = match *self { [INFO] [stderr] 34 | // TODO: are these messages idiomatic? See https://github.com/milesmcc/ArmorLib/issues/4 [INFO] [stderr] 35 | ArmorlibError::UnknownProcessingError(ref msg) => { [INFO] [stderr] 36 | format!("an unknown processing error occured: {}", msg) [INFO] [stderr] 37 | } [INFO] [stderr] 38 | ArmorlibError::ParseError(ref msg) => { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/errors.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | / match self { [INFO] [stderr] 59 | | &ArmorlibError::UnknownProcessingError(_) => "an unknown processing error occured", [INFO] [stderr] 60 | | &ArmorlibError::ParseError(_) => "an error occured while parsing data", [INFO] [stderr] 61 | | &ArmorlibError::MissingPreprocessor(_) => "unable to find the preprocessor", [INFO] [stderr] 62 | | &ArmorlibError::MissingMetadata(_) => "unable to find the metadata", [INFO] [stderr] 63 | | &ArmorlibError::ReadFileError(_) => "unable to read the file", [INFO] [stderr] 64 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 58 | match *self { [INFO] [stderr] 59 | ArmorlibError::UnknownProcessingError(_) => "an unknown processing error occured", [INFO] [stderr] 60 | ArmorlibError::ParseError(_) => "an error occured while parsing data", [INFO] [stderr] 61 | ArmorlibError::MissingPreprocessor(_) => "unable to find the preprocessor", [INFO] [stderr] 62 | ArmorlibError::MissingMetadata(_) => "unable to find the metadata", [INFO] [stderr] 63 | ArmorlibError::ReadFileError(_) => "unable to read the file", [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/util.rs:28:56 [INFO] [stderr] | [INFO] [stderr] 28 | for byte in String::from(hex).to_uppercase().split(" ") { [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:47:22 [INFO] [stderr] | [INFO] [stderr] 47 | let first: u16 = (first as u16) << 8; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u16::from(first)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:48:23 [INFO] [stderr] | [INFO] [stderr] 48 | let second: u16 = second as u16; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u16::from(second)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:69:22 [INFO] [stderr] | [INFO] [stderr] 69 | let first: u32 = (first as u32) << 24; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(first)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:70:23 [INFO] [stderr] | [INFO] [stderr] 70 | let second: u32 = (second as u32) << 16; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `u32::from(second)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:71:22 [INFO] [stderr] | [INFO] [stderr] 71 | let third: u32 = (third as u32) << 8; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `u32::from(third)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/util.rs:72:23 [INFO] [stderr] | [INFO] [stderr] 72 | let fourth: u32 = fourth as u32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u32::from(fourth)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/preprocessors/filetype.rs:68:48 [INFO] [stderr] | [INFO] [stderr] 68 | let pattern_hex: Vec<&str> = pattern.split(" ").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> src/preprocessors/filetype.rs:74:19 [INFO] [stderr] | [INFO] [stderr] 74 | if pat == String::from("??") { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `"??"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cmp_owned)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stderr] [INFO] [stderr] warning: this creates an owned instance just for comparison [INFO] [stderr] --> src/preprocessors/filetype.rs:79:12 [INFO] [stderr] | [INFO] [stderr] 79 | if String::from(byte_str) != pat { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `byte_str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/preprocessors/filetype.rs:79:12 [INFO] [stderr] | [INFO] [stderr] 79 | if String::from(byte_str) != pat { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `byte_str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/preprocessors/text.rs:44:20 [INFO] [stderr] | [INFO] [stderr] 44 | pub fn is_text(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/preprocessors/text.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | / match self { [INFO] [stderr] 46 | | &Encoding::Ascii => true, [INFO] [stderr] 47 | | &Encoding::Utf8 => true, [INFO] [stderr] 48 | | &Encoding::Utf16 => true, [INFO] [stderr] 49 | | &Encoding::Utf32 => true, [INFO] [stderr] 50 | | _ => false, [INFO] [stderr] 51 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 45 | match *self { [INFO] [stderr] 46 | Encoding::Ascii => true, [INFO] [stderr] 47 | Encoding::Utf8 => true, [INFO] [stderr] 48 | Encoding::Utf16 => true, [INFO] [stderr] 49 | Encoding::Utf32 => true, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/preprocessors/text.rs:59:12 [INFO] [stderr] | [INFO] [stderr] 59 | if length <= &0_usize { [INFO] [stderr] | ^^^^^^^^^^-------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `0_usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/preprocessors/text.rs:63:12 [INFO] [stderr] | [INFO] [stderr] 63 | if length > &4_usize && data[0..4] == [0xFF_u8, 0xFE_u8, 0x00_u8, 0x00_u8] { [INFO] [stderr] | ^^^^^^^^^-------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `4_usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/preprocessors/text.rs:66:19 [INFO] [stderr] | [INFO] [stderr] 66 | } else if length > &2_usize && data[0..2] == [0xFF_u8, 0xFE_u8] { [INFO] [stderr] | ^^^^^^^^^-------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `2_usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: taken reference of right operand [INFO] [stderr] --> src/preprocessors/text.rs:69:19 [INFO] [stderr] | [INFO] [stderr] 69 | } else if length > &3_usize && data[0..3] == [0xEF_u8, 0xBB_u8, 0xBF_u8] { [INFO] [stderr] | ^^^^^^^^^-------- [INFO] [stderr] | | [INFO] [stderr] | help: use the right value directly: `3_usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/preprocessors/text.rs:87:25 [INFO] [stderr] | [INFO] [stderr] 87 | pub fn extract_text(&self, binary_object: &BinaryObject) -> String { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/preprocessors/text.rs:91:9 [INFO] [stderr] | [INFO] [stderr] 91 | / match self { [INFO] [stderr] 92 | | &Encoding::Ascii => String::from(String::from_utf8_lossy(data.as_slice()).to_owned()), [INFO] [stderr] 93 | | &Encoding::Utf16 => { [INFO] [stderr] 94 | | let mut len = data.len(); [INFO] [stderr] ... | [INFO] [stderr] 132 | | _ => String::from_utf8_lossy(data_slice).to_string(), // binaries and other files may contain utf8 data, as well as utf8 itself [INFO] [stderr] 133 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 91 | match *self { [INFO] [stderr] 92 | Encoding::Ascii => String::from(String::from_utf8_lossy(data.as_slice()).to_owned()), [INFO] [stderr] 93 | Encoding::Utf16 => { [INFO] [stderr] 94 | let mut len = data.len(); [INFO] [stderr] 95 | if len % 2 != 0 { [INFO] [stderr] 96 | len -= 1; // truncate the last byte if invalid [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/preprocessors/text.rs:125:21 [INFO] [stderr] | [INFO] [stderr] 125 | / match char::from_u32(u) { [INFO] [stderr] 126 | | Some(character) => string.push(character), [INFO] [stderr] 127 | | None => {}, [INFO] [stderr] 128 | | } [INFO] [stderr] | |_____________________^ help: try this: `if let Some(character) = char::from_u32(u) { string.push(character) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/scan_modules/unicode_watermark.rs:67:13 [INFO] [stderr] | [INFO] [stderr] 67 | / match watermarks.get(&character) { [INFO] [stderr] 68 | | Some(warn_text) => { [INFO] [stderr] 69 | | findings.push(Finding { [INFO] [stderr] 70 | | title: String::from(*warn_text), [INFO] [stderr] ... | [INFO] [stderr] 82 | | _ => {} [INFO] [stderr] 83 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 67 | if let Some(warn_text) = watermarks.get(&character) { [INFO] [stderr] 68 | findings.push(Finding { [INFO] [stderr] 69 | title: String::from(*warn_text), [INFO] [stderr] 70 | description: format!( [INFO] [stderr] 71 | "found suspicious character at index {}: \"{}\"", [INFO] [stderr] 72 | i, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: zero-width space detected [INFO] [stderr] --> src/scan_modules/unicode_watermark.rs:108:5 [INFO] [stderr] | [INFO] [stderr] 108 | / fn test_zero_width_space_char() { [INFO] [stderr] 109 | | // has zero-width spaces in it after "the" and "nuclear" (non-breaking and breaking) [INFO] [stderr] 110 | | let sus_string = "The nuclear​ launch codes are 0000, 0001, and 1234."; [INFO] [stderr] 111 | | let mut scan_result = process( [INFO] [stderr] ... | [INFO] [stderr] 145 | | "found suspicious character at index 14: \"The\u{feff} nuclear_[HERE]_ launch codes are\""); [INFO] [stderr] 146 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::zero_width_space)] on by default [INFO] [stderr] = help: Consider replacing the string with: [INFO] [stderr] "fn test_zero_width_space_char() { [INFO] [stderr] // has zero-width spaces in it after "the" and "nuclear" (non-breaking and breaking) [INFO] [stderr] let sus_string = "The nuclear\u{200B} launch codes are 0000, 0001, and 1234."; [INFO] [stderr] let mut scan_result = process( [INFO] [stderr] vec![Box::new(UnicodeWatermarkScanModule)], [INFO] [stderr] Vec::new(), [INFO] [stderr] BinaryObject::from(sus_string.as_bytes().to_vec()), [INFO] [stderr] None, [INFO] [stderr] ).unwrap(); [INFO] [stderr] let scan_report = scan_result.reports.pop().unwrap(); [INFO] [stderr] assert_eq!(scan_report.module_info.0.as_str(), "unicode_watermark"); [INFO] [stderr] assert_eq!( [INFO] [stderr] scan_report.module_info.1.as_str(), [INFO] [stderr] "searches for attempts to watermark text using unusual Unicode" [INFO] [stderr] ); [INFO] [stderr] let findings = scan_report.findings.unwrap(); [INFO] [stderr] let finding1 = findings.get(0).unwrap(); [INFO] [stderr] let finding2 = findings.get(1).unwrap(); [INFO] [stderr] assert_eq!( [INFO] [stderr] finding1.title, [INFO] [stderr] "Unicode zero-width no-break space: most likely suspicious" [INFO] [stderr] ); [INFO] [stderr] assert_eq!( [INFO] [stderr] finding2.title, [INFO] [stderr] "Unicode zero-width space: most likely suspicious" [INFO] [stderr] ); [INFO] [stderr] assert_eq!(finding1.id, "UNICODE_WATERMARK"); [INFO] [stderr] assert_eq!(finding1.severity, finding2.severity); [INFO] [stderr] assert_eq!( [INFO] [stderr] finding1.severity, [INFO] [stderr] Severity::Warn(String::from("possible attempt to watermark data")) [INFO] [stderr] ); [INFO] [stderr] assert_eq!( [INFO] [stderr] finding1.description, [INFO] [stderr] "found suspicious character at index 3: \"The_[HERE]_ nuclear\u{200b} launc\"" [INFO] [stderr] ); [INFO] [stderr] assert_eq!(finding2.description, [INFO] [stderr] "found suspicious character at index 14: \"The\u{feff} nuclear_[HERE]_ launch codes are\""); [INFO] [stderr] }" [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_width_space [INFO] [stderr] [INFO] [stderr] error: zero-width space detected [INFO] [stderr] --> src/scan_modules/unicode_watermark.rs:110:26 [INFO] [stderr] | [INFO] [stderr] 110 | let sus_string = "The nuclear​ launch codes are 0000, 0001, and 1234."; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider replacing the string with: [INFO] [stderr] ""The nuclear\u{200B} launch codes are 0000, 0001, and 1234."" [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_width_space [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/scan_modules/unicode_watermark.rs:124:24 [INFO] [stderr] | [INFO] [stderr] 124 | let finding1 = findings.get(0).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&findings[0]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/scan_modules/unicode_watermark.rs:125:24 [INFO] [stderr] | [INFO] [stderr] 125 | let finding2 = findings.get(1).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&findings[1]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/scan_modules/unicode_watermark.rs:164:24 [INFO] [stderr] | [INFO] [stderr] 164 | let finding1 = findings.get(0).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&findings[0]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/scan_modules/unicode_watermark.rs:165:24 [INFO] [stderr] | [INFO] [stderr] 165 | let finding2 = findings.get(1).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&findings[1]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: needlessly taken reference of both operands [INFO] [stderr] --> src/scan_modules/mod.rs:62:16 [INFO] [stderr] | [INFO] [stderr] 62 | if &scan_object.filetype.is_some() == &true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 62 | if scan_object.filetype.is_some() == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/scan_modules/mod.rs:63:47 [INFO] [stderr] | [INFO] [stderr] 63 | let given_filetype: &String = match &scan_object.filetype.as_ref() { [INFO] [stderr] | _______________________________________________^ [INFO] [stderr] 64 | | &Some(filetype) => &filetype, [INFO] [stderr] 65 | | &None => unreachable!(), [INFO] [stderr] 66 | | }; [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 63 | let given_filetype: &String = match scan_object.filetype.as_ref() { [INFO] [stderr] 64 | Some(filetype) => &filetype, [INFO] [stderr] 65 | None => unreachable!(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `armorlib`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: the function has a cyclomatic complexity of 31 [INFO] [stderr] --> src/cli/bin.rs:57:1 [INFO] [stderr] | [INFO] [stderr] 57 | / fn run_scan(matches: &clap::ArgMatches) { [INFO] [stderr] 58 | | use std::fs::File; [INFO] [stderr] 59 | | use std::io::prelude::*; [INFO] [stderr] 60 | | use std::path::Path; [INFO] [stderr] ... | [INFO] [stderr] 155 | | } [INFO] [stderr] 156 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 31 [INFO] [stderr] --> src/cli/bin.rs:57:1 [INFO] [stderr] | [INFO] [stderr] 57 | / fn run_scan(matches: &clap::ArgMatches) { [INFO] [stderr] 58 | | use std::fs::File; [INFO] [stderr] 59 | | use std::io::prelude::*; [INFO] [stderr] 60 | | use std::path::Path; [INFO] [stderr] ... | [INFO] [stderr] 155 | | } [INFO] [stderr] 156 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "733148a7313f25e57a1fef8435ccb5e0810432fc15907e2210b8be892d83703b"` [INFO] running `"docker" "rm" "-f" "733148a7313f25e57a1fef8435ccb5e0810432fc15907e2210b8be892d83703b"` [INFO] [stdout] 733148a7313f25e57a1fef8435ccb5e0810432fc15907e2210b8be892d83703b