[INFO] crate fuzzyhash 0.1.4 is already in cache [INFO] extracting crate fuzzyhash 0.1.4 into work/ex/clippy-test-run/sources/stable/reg/fuzzyhash/0.1.4 [INFO] extracting crate fuzzyhash 0.1.4 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/fuzzyhash/0.1.4 [INFO] validating manifest of fuzzyhash-0.1.4 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 fuzzyhash-0.1.4 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 fuzzyhash-0.1.4 [INFO] finished frobbing fuzzyhash-0.1.4 [INFO] frobbed toml for fuzzyhash-0.1.4 written to work/ex/clippy-test-run/sources/stable/reg/fuzzyhash/0.1.4/Cargo.toml [INFO] started frobbing fuzzyhash-0.1.4 [INFO] finished frobbing fuzzyhash-0.1.4 [INFO] frobbed toml for fuzzyhash-0.1.4 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/fuzzyhash/0.1.4/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 fuzzyhash-0.1.4 against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/fuzzyhash/0.1.4:/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 -Dclippy::into_iter_on_array" "-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] 8ffdbcd30551fc474c80a2e76469b9b13fc863c00db17cb928199012729be54b [INFO] running `"docker" "start" "-a" "8ffdbcd30551fc474c80a2e76469b9b13fc863c00db17cb928199012729be54b"` [INFO] [stderr] Checking fuzzyhash v0.1.4 (/opt/crater/workdir) [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/constants.rs:6:26 [INFO] [stderr] | [INFO] [stderr] 6 | pub const BASE64_CHARS: &'static str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/blockhash.rs:4:29 [INFO] [stderr] | [INFO] [stderr] 4 | pub const HASH_PRIME: u32 = 0x01000193; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0100_0193` [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: long literal lacking separators [INFO] [stderr] --> src/blockhash.rs:5:28 [INFO] [stderr] | [INFO] [stderr] 5 | pub const HASH_INIT: u32 = 0x28021967; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x2802_1967` [INFO] [stderr] | [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/compare.rs:246:9 [INFO] [stderr] | [INFO] [stderr] 246 | return max(score1, score2); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `max(score1, score2)` [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/compare.rs:248:9 [INFO] [stderr] | [INFO] [stderr] 248 | return score_strings(first_block1, second_block2, first_block_size); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `score_strings(first_block1, second_block2, first_block_size)` [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/compare.rs:250:9 [INFO] [stderr] | [INFO] [stderr] 250 | return score_strings(first_block2, second_block1, second_block_size); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `score_strings(first_block2, second_block1, second_block_size)` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/constants.rs:6:26 [INFO] [stderr] | [INFO] [stderr] 6 | pub const BASE64_CHARS: &'static str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/blockhash.rs:4:29 [INFO] [stderr] | [INFO] [stderr] 4 | pub const HASH_PRIME: u32 = 0x01000193; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x0100_0193` [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: long literal lacking separators [INFO] [stderr] --> src/blockhash.rs:5:28 [INFO] [stderr] | [INFO] [stderr] 5 | pub const HASH_INIT: u32 = 0x28021967; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0x2802_1967` [INFO] [stderr] | [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/compare.rs:246:9 [INFO] [stderr] | [INFO] [stderr] 246 | return max(score1, score2); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `max(score1, score2)` [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/compare.rs:248:9 [INFO] [stderr] | [INFO] [stderr] 248 | return score_strings(first_block1, second_block2, first_block_size); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `score_strings(first_block1, second_block2, first_block_size)` [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/compare.rs:250:9 [INFO] [stderr] | [INFO] [stderr] 250 | return score_strings(first_block2, second_block1, second_block_size); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `score_strings(first_block2, second_block1, second_block_size)` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/roll.rs:19:55 [INFO] [stderr] | [INFO] [stderr] 19 | self.h2 += constants::ROLLING_WINDOW as u32 * c as u32; [INFO] [stderr] | ^^^^^^^^ help: try: `u32::from(c)` [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 u32 may become silently lossy if types change [INFO] [stderr] --> src/roll.rs:21:20 [INFO] [stderr] | [INFO] [stderr] 21 | self.h1 += c as u32; [INFO] [stderr] | ^^^^^^^^ help: try: `u32::from(c)` [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/roll.rs:22:20 [INFO] [stderr] | [INFO] [stderr] 22 | self.h1 -= self.window[(self.n as usize % constants::ROLLING_WINDOW)] as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(self.window[(self.n as usize % constants::ROLLING_WINDOW)])` [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/roll.rs:28:20 [INFO] [stderr] | [INFO] [stderr] 28 | self.h3 ^= c as u32; [INFO] [stderr] | ^^^^^^^^ help: try: `u32::from(c)` [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/blockhash.rs:37:34 [INFO] [stderr] | [INFO] [stderr] 37 | let c_wrapped = Wrapping(c as u32); [INFO] [stderr] | ^^^^^^^^ help: try: `u32::from(c)` [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/blockhash.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | / match init { [INFO] [stderr] 44 | | true => { [INFO] [stderr] 45 | | }, [INFO] [stderr] 46 | | false => { [INFO] [stderr] 47 | | self.d_len += 1; [INFO] [stderr] 48 | | } [INFO] [stderr] 49 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 43 | if !init { [INFO] [stderr] 44 | self.d_len += 1; [INFO] [stderr] 45 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i2` is used to index `t1` [INFO] [stderr] --> src/compare.rs:15:15 [INFO] [stderr] | [INFO] [stderr] 15 | for i2 in 0..s2.len() + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 15 | for (i2, ) in t1.iter_mut().enumerate().take(s2.len() + 1) { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/compare.rs:15:15 [INFO] [stderr] | [INFO] [stderr] 15 | for i2 in 0..s2.len() + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: use: `0..=s2.len()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i1` is used to index `s1` [INFO] [stderr] --> src/compare.rs:18:15 [INFO] [stderr] | [INFO] [stderr] 18 | for i1 in 0..s1.len() { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 18 | for (i1, ) in s1.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is used to index `hashes` [INFO] [stderr] --> src/compare.rs:59:18 [INFO] [stderr] | [INFO] [stderr] 59 | for j in (constants::ROLLING_WINDOW - 1)..num_hashes { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 59 | for (j, ) in hashes.iter().enumerate().take(num_hashes).skip((constants::ROLLING_WINDOW - 1)) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `Hasher` [INFO] [stderr] --> src/lib.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | / pub fn new() -> Hasher { [INFO] [stderr] 19 | | let mut h = Hasher { [INFO] [stderr] 20 | | bh_start: 0, [INFO] [stderr] 21 | | bh_end: 1, [INFO] [stderr] ... | [INFO] [stderr] 27 | | h [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 17 | impl Default for Hasher { [INFO] [stderr] 18 | fn default() -> Self { [INFO] [stderr] 19 | Self::new() [INFO] [stderr] 20 | } [INFO] [stderr] 21 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `buffer`. [INFO] [stderr] --> src/lib.rs:100:18 [INFO] [stderr] | [INFO] [stderr] 100 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 100 | for in buffer.iter().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 28 [INFO] [stderr] --> src/lib.rs:105:5 [INFO] [stderr] | [INFO] [stderr] 105 | / pub fn digest(&mut self, flags: constants::Modes) -> String { [INFO] [stderr] 106 | | let mut result = vec![0; constants::MAX_RESULT_LENGTH as usize]; [INFO] [stderr] 107 | | let mut pos = 0; [INFO] [stderr] 108 | | let mut bi = self.bh_start; [INFO] [stderr] ... | [INFO] [stderr] 245 | | String::from_utf8(result).unwrap() [INFO] [stderr] 246 | | } [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: it looks like you're manually copying between slices [INFO] [stderr] --> src/lib.rs:131:18 [INFO] [stderr] | [INFO] [stderr] 131 | for j in 0..i { [INFO] [stderr] | ^^^^ help: try replacing the loop by: `result[pos..(i + pos)].clone_from_slice(&blocksize_chars[..i])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/lib.rs:134:21 [INFO] [stderr] | [INFO] [stderr] 134 | result[i] = ':' as u8; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b':' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/lib.rs:145:26 [INFO] [stderr] | [INFO] [stderr] 145 | for k in 0..i { [INFO] [stderr] | ^^^^ help: try replacing the loop by: `result[pos..(i + pos)].clone_from_slice(&self.bh[bi as usize].digest[..i])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/lib.rs:175:23 [INFO] [stderr] | [INFO] [stderr] 175 | result[pos] = ':' as u8; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b':' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/lib.rs:195:30 [INFO] [stderr] | [INFO] [stderr] 195 | for k in 0..i { [INFO] [stderr] | ^^^^ help: try replacing the loop by: `result[pos..(i + pos)].clone_from_slice(&self.bh[bi as usize].digest[..i])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] error: this public function dereferences a raw pointer but is not marked `unsafe` [INFO] [stderr] --> src/lib.rs:297:52 [INFO] [stderr] | [INFO] [stderr] 297 | let data = unsafe { std::slice::from_raw_parts(buf, length) }; [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::not_unsafe_ptr_arg_deref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#not_unsafe_ptr_arg_deref [INFO] [stderr] [INFO] [stderr] error: this public function dereferences a raw pointer but is not marked `unsafe` [INFO] [stderr] --> src/lib.rs:319:37 [INFO] [stderr] | [INFO] [stderr] 319 | let f = unsafe { CStr::from_ptr(first) }; [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#not_unsafe_ptr_arg_deref [INFO] [stderr] [INFO] [stderr] error: this public function dereferences a raw pointer but is not marked `unsafe` [INFO] [stderr] --> src/lib.rs:320:37 [INFO] [stderr] | [INFO] [stderr] 320 | let s = unsafe { CStr::from_ptr(second) }; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#not_unsafe_ptr_arg_deref [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `fuzzyhash`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/roll.rs:19:55 [INFO] [stderr] | [INFO] [stderr] 19 | self.h2 += constants::ROLLING_WINDOW as u32 * c as u32; [INFO] [stderr] | ^^^^^^^^ help: try: `u32::from(c)` [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 u32 may become silently lossy if types change [INFO] [stderr] --> src/roll.rs:21:20 [INFO] [stderr] | [INFO] [stderr] 21 | self.h1 += c as u32; [INFO] [stderr] | ^^^^^^^^ help: try: `u32::from(c)` [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/roll.rs:22:20 [INFO] [stderr] | [INFO] [stderr] 22 | self.h1 -= self.window[(self.n as usize % constants::ROLLING_WINDOW)] as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(self.window[(self.n as usize % constants::ROLLING_WINDOW)])` [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/roll.rs:28:20 [INFO] [stderr] | [INFO] [stderr] 28 | self.h3 ^= c as u32; [INFO] [stderr] | ^^^^^^^^ help: try: `u32::from(c)` [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/blockhash.rs:37:34 [INFO] [stderr] | [INFO] [stderr] 37 | let c_wrapped = Wrapping(c as u32); [INFO] [stderr] | ^^^^^^^^ help: try: `u32::from(c)` [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/blockhash.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | / match init { [INFO] [stderr] 44 | | true => { [INFO] [stderr] 45 | | }, [INFO] [stderr] 46 | | false => { [INFO] [stderr] 47 | | self.d_len += 1; [INFO] [stderr] 48 | | } [INFO] [stderr] 49 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] help: consider using an if/else expression [INFO] [stderr] | [INFO] [stderr] 43 | if !init { [INFO] [stderr] 44 | self.d_len += 1; [INFO] [stderr] 45 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i2` is used to index `t1` [INFO] [stderr] --> src/compare.rs:15:15 [INFO] [stderr] | [INFO] [stderr] 15 | for i2 in 0..s2.len() + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 15 | for (i2, ) in t1.iter_mut().enumerate().take(s2.len() + 1) { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/compare.rs:15:15 [INFO] [stderr] | [INFO] [stderr] 15 | for i2 in 0..s2.len() + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: use: `0..=s2.len()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i1` is used to index `s1` [INFO] [stderr] --> src/compare.rs:18:15 [INFO] [stderr] | [INFO] [stderr] 18 | for i1 in 0..s1.len() { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 18 | for (i1, ) in s1.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is used to index `hashes` [INFO] [stderr] --> src/compare.rs:59:18 [INFO] [stderr] | [INFO] [stderr] 59 | for j in (constants::ROLLING_WINDOW - 1)..num_hashes { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 59 | for (j, ) in hashes.iter().enumerate().take(num_hashes).skip((constants::ROLLING_WINDOW - 1)) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `Hasher` [INFO] [stderr] --> src/lib.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | / pub fn new() -> Hasher { [INFO] [stderr] 19 | | let mut h = Hasher { [INFO] [stderr] 20 | | bh_start: 0, [INFO] [stderr] 21 | | bh_end: 1, [INFO] [stderr] ... | [INFO] [stderr] 27 | | h [INFO] [stderr] 28 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 17 | impl Default for Hasher { [INFO] [stderr] 18 | fn default() -> Self { [INFO] [stderr] 19 | Self::new() [INFO] [stderr] 20 | } [INFO] [stderr] 21 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `buffer`. [INFO] [stderr] --> src/lib.rs:100:18 [INFO] [stderr] | [INFO] [stderr] 100 | for i in 0..len { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 100 | for in buffer.iter().take(len) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 28 [INFO] [stderr] --> src/lib.rs:105:5 [INFO] [stderr] | [INFO] [stderr] 105 | / pub fn digest(&mut self, flags: constants::Modes) -> String { [INFO] [stderr] 106 | | let mut result = vec![0; constants::MAX_RESULT_LENGTH as usize]; [INFO] [stderr] 107 | | let mut pos = 0; [INFO] [stderr] 108 | | let mut bi = self.bh_start; [INFO] [stderr] ... | [INFO] [stderr] 245 | | String::from_utf8(result).unwrap() [INFO] [stderr] 246 | | } [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: it looks like you're manually copying between slices [INFO] [stderr] --> src/lib.rs:131:18 [INFO] [stderr] | [INFO] [stderr] 131 | for j in 0..i { [INFO] [stderr] | ^^^^ help: try replacing the loop by: `result[pos..(i + pos)].clone_from_slice(&blocksize_chars[..i])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/lib.rs:134:21 [INFO] [stderr] | [INFO] [stderr] 134 | result[i] = ':' as u8; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b':' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/lib.rs:145:26 [INFO] [stderr] | [INFO] [stderr] 145 | for k in 0..i { [INFO] [stderr] | ^^^^ help: try replacing the loop by: `result[pos..(i + pos)].clone_from_slice(&self.bh[bi as usize].digest[..i])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/lib.rs:175:23 [INFO] [stderr] | [INFO] [stderr] 175 | result[pos] = ':' as u8; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b':' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/lib.rs:195:30 [INFO] [stderr] | [INFO] [stderr] 195 | for k in 0..i { [INFO] [stderr] | ^^^^ help: try replacing the loop by: `result[pos..(i + pos)].clone_from_slice(&self.bh[bi as usize].digest[..i])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] error: this public function dereferences a raw pointer but is not marked `unsafe` [INFO] [stderr] --> src/lib.rs:297:52 [INFO] [stderr] | [INFO] [stderr] 297 | let data = unsafe { std::slice::from_raw_parts(buf, length) }; [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::not_unsafe_ptr_arg_deref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#not_unsafe_ptr_arg_deref [INFO] [stderr] [INFO] [stderr] error: this public function dereferences a raw pointer but is not marked `unsafe` [INFO] [stderr] --> src/lib.rs:319:37 [INFO] [stderr] | [INFO] [stderr] 319 | let f = unsafe { CStr::from_ptr(first) }; [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#not_unsafe_ptr_arg_deref [INFO] [stderr] [INFO] [stderr] error: this public function dereferences a raw pointer but is not marked `unsafe` [INFO] [stderr] --> src/lib.rs:320:37 [INFO] [stderr] | [INFO] [stderr] 320 | let s = unsafe { CStr::from_ptr(second) }; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#not_unsafe_ptr_arg_deref [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `fuzzyhash`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "8ffdbcd30551fc474c80a2e76469b9b13fc863c00db17cb928199012729be54b"` [INFO] running `"docker" "rm" "-f" "8ffdbcd30551fc474c80a2e76469b9b13fc863c00db17cb928199012729be54b"` [INFO] [stdout] 8ffdbcd30551fc474c80a2e76469b9b13fc863c00db17cb928199012729be54b