You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by mg...@apache.org on 2022/02/01 11:51:20 UTC

[avro] 05/30: AVRO-3245 Rust: Replace crc crate with crc32fast (#1388)

This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch branch-1.11
in repository https://gitbox.apache.org/repos/asf/avro.git

commit 76d1cc34cfd8196c2eadeb6b26339e6ce332d996
Author: Martin Grigorov <ma...@users.noreply.github.com>
AuthorDate: Wed Jan 5 09:45:25 2022 +0200

    AVRO-3245 Rust: Replace crc crate with crc32fast (#1388)
    
    Signed-off-by: Martin Tzvetanov Grigorov <mg...@apache.org>
    (cherry picked from commit 54f37e52cb373904c7529a74dee1275bffac457a)
---
 lang/rust/Cargo.toml   |  4 ++--
 lang/rust/src/codec.rs | 14 +++++++++++---
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/lang/rust/Cargo.toml b/lang/rust/Cargo.toml
index 4501bf0..328e858 100644
--- a/lang/rust/Cargo.toml
+++ b/lang/rust/Cargo.toml
@@ -29,7 +29,7 @@ categories = ["encoding"]
 documentation = "https://docs.rs/avro-rs"
 
 [features]
-snappy = ["crc", "snap"]
+snappy = ["crc32fast", "snap"]
 zstandard = ["zstd"]
 bzip = ["bzip2"]
 
@@ -53,7 +53,7 @@ harness = false
 [dependencies]
 byteorder = "1.4.3"
 bzip2 = { version = "0.4.3", optional = true }
-crc = { version = "1.8.1", optional = true }
+crc32fast = { version = "1.2.1", optional = true }
 digest = "0.9"
 libflate = "1.1.1"
 num-bigint = "0.4.2"
diff --git a/lang/rust/src/codec.rs b/lang/rust/src/codec.rs
index 84f0381..15992c1 100644
--- a/lang/rust/src/codec.rs
+++ b/lang/rust/src/codec.rs
@@ -26,6 +26,10 @@ use bzip2::{
     read::{BzDecoder, BzEncoder},
     Compression,
 };
+#[cfg(feature = "snappy")]
+extern crate crc32fast;
+#[cfg(feature = "snappy")]
+use crc32fast::Hasher;
 
 /// The compression codec used to compress blocks.
 #[derive(Clone, Copy, Debug, PartialEq, EnumString, IntoStaticStr)]
@@ -79,8 +83,10 @@ impl Codec {
                     .compress(&stream[..], &mut encoded[..])
                     .map_err(Error::SnappyCompress)?;
 
-                let crc = crc::crc32::checksum_ieee(&stream[..]);
-                byteorder::BigEndian::write_u32(&mut encoded[compressed_size..], crc);
+                let mut hasher = Hasher::new();
+                hasher.update(&stream[..]);
+                let checksum = hasher.finalize();
+                byteorder::BigEndian::write_u32(&mut encoded[compressed_size..], checksum);
                 encoded.truncate(compressed_size + 4);
 
                 *stream = encoded;
@@ -127,7 +133,9 @@ impl Codec {
                     .map_err(Error::SnappyDecompress)?;
 
                 let expected = byteorder::BigEndian::read_u32(&stream[stream.len() - 4..]);
-                let actual = crc::crc32::checksum_ieee(&decoded);
+                let mut hasher = Hasher::new();
+                hasher.update(&decoded);
+                let actual = hasher.finalize();
 
                 if expected != actual {
                     return Err(Error::SnappyCrc32 { expected, actual });