diff options
| -rw-r--r-- | src/test.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/test.rs b/src/test.rs index cbe0188..be5f66f 100644 --- a/src/test.rs +++ b/src/test.rs @@ -564,3 +564,23 @@ fn test_hex_encoding_decoding() { #[cfg(feature = "std")] assert_eq!(_result.to_string(), "invalid hex character: 0x80"); } + +#[test] +fn test_trigger_sse2() { + // This stupid loop has to be here. I don't know why. + for _ in &[0] { + // The length 65 (two blocks) is significant. It doesn't repro with 64 (one block). + // It also doesn't repro with an all-zero input. + let input = &[0xff; 65]; + let expected_hash = [ + 183, 235, 50, 217, 156, 24, 190, 219, 2, 216, 176, 255, 224, 53, 28, 95, 57, 148, 179, + 245, 162, 90, 37, 121, 0, 142, 219, 62, 234, 204, 225, 161, + ]; + + // This throwaway call has to be here to trigger the bug. + crate::Hasher::new().update(input); + + // This assert fails. + assert_eq!(crate::Hasher::new().update(input).finalize(), expected_hash); + } +} |
