From 020b5c4f943aa6481339b3fa5883494f5f883340 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jan 2023 11:03:34 +0000 Subject: [PATCH 1/3] chore(deps): update base64 requirement from 0.13 to 0.21 Updates the requirements on [base64](https://github.com/marshallpierce/rust-base64) to permit the latest version. - [Release notes](https://github.com/marshallpierce/rust-base64/releases) - [Changelog](https://github.com/marshallpierce/rust-base64/blob/master/RELEASE-NOTES.md) - [Commits](https://github.com/marshallpierce/rust-base64/compare/v0.13.0...v0.21.0) --- updated-dependencies: - dependency-name: base64 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pbjson/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbjson/Cargo.toml b/pbjson/Cargo.toml index 40557e5..5d36f44 100644 --- a/pbjson/Cargo.toml +++ b/pbjson/Cargo.toml @@ -12,7 +12,7 @@ repository = "https://github.com/influxdata/pbjson" [dependencies] serde = { version = "1.0", features = ["derive"] } -base64 = "0.13" +base64 = "0.21" [dev-dependencies] bytes = "1.0" From 66a7374b20af373bfb59597e81d00ac897f61574 Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Sun, 17 Sep 2023 17:11:48 +0100 Subject: [PATCH 2/3] fix: fix removed methods --- pbjson-types/src/wrappers.rs | 4 +++- pbjson/src/lib.rs | 17 ++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/pbjson-types/src/wrappers.rs b/pbjson-types/src/wrappers.rs index 25e6c21..0c5fae0 100644 --- a/pbjson-types/src/wrappers.rs +++ b/pbjson-types/src/wrappers.rs @@ -32,7 +32,9 @@ macro_rules! ser_bytes_value { where S: serde::Serializer, { - let value = pbjson::private::base64::encode(&self.value); + use pbjson::private::base64::engine::Engine; + let value = + pbjson::private::base64::engine::general_purpose::STANDARD.encode(&self.value); value.serialize(ser) } } diff --git a/pbjson/src/lib.rs b/pbjson/src/lib.rs index 0e17df0..59c65a1 100644 --- a/pbjson/src/lib.rs +++ b/pbjson/src/lib.rs @@ -22,6 +22,7 @@ pub mod private { /// Re-export base64 pub use base64; + use base64::Engine; use serde::de::Visitor; use serde::Deserialize; use std::borrow::Cow; @@ -69,7 +70,8 @@ pub mod private { where E: serde::de::Error, { - let decoded = base64::decode_config(s, base64::STANDARD) + let decoded = base64::engine::general_purpose::STANDARD + .decode(s) .or_else(|e| match e { // Either standard or URL-safe base64 encoding are accepted // @@ -78,7 +80,7 @@ pub mod private { // Therefore if we error out on those characters, try again with // the URL-safe character set base64::DecodeError::InvalidByte(_, c) if c == b'-' || c == b'_' => { - base64::decode_config(s, base64::URL_SAFE) + base64::engine::general_purpose::URL_SAFE.decode(s) } _ => Err(e), }) @@ -105,6 +107,7 @@ pub mod private { #[cfg(test)] mod tests { use super::*; + use base64::Engine; use bytes::Bytes; use rand::prelude::*; use serde::de::value::{BorrowedStrDeserializer, Error}; @@ -117,12 +120,12 @@ pub mod private { let raw: Vec<_> = std::iter::from_fn(|| Some(rng.gen())).take(len).collect(); for config in [ - base64::STANDARD, - base64::STANDARD_NO_PAD, - base64::URL_SAFE, - base64::URL_SAFE_NO_PAD, + base64::engine::general_purpose::STANDARD, + base64::engine::general_purpose::STANDARD_NO_PAD, + base64::engine::general_purpose::URL_SAFE, + base64::engine::general_purpose::URL_SAFE_NO_PAD, ] { - let encoded = base64::encode_config(&raw, config); + let encoded = config.encode(&raw); let deserializer = BorrowedStrDeserializer::<'_, Error>::new(&encoded); let a: Bytes = BytesDeserialize::deserialize(deserializer).unwrap().0; From 14c91445604fb03bbd97030b1f4c99341f8fc796 Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Sun, 17 Sep 2023 18:13:30 +0100 Subject: [PATCH 3/3] fix: indifferent padding --- pbjson/src/lib.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pbjson/src/lib.rs b/pbjson/src/lib.rs index 59c65a1..ea7828b 100644 --- a/pbjson/src/lib.rs +++ b/pbjson/src/lib.rs @@ -22,6 +22,8 @@ pub mod private { /// Re-export base64 pub use base64; + use base64::engine::DecodePaddingMode; + use base64::engine::{GeneralPurpose, GeneralPurposeConfig}; use base64::Engine; use serde::de::Visitor; use serde::Deserialize; @@ -70,7 +72,14 @@ pub mod private { where E: serde::de::Error, { - let decoded = base64::engine::general_purpose::STANDARD + const INDIFFERENT_PAD: GeneralPurposeConfig = GeneralPurposeConfig::new() + .with_decode_padding_mode(DecodePaddingMode::Indifferent); + const STANDARD_INDIFFERENT_PAD: GeneralPurpose = + GeneralPurpose::new(&base64::alphabet::STANDARD, INDIFFERENT_PAD); + const URL_SAFE_INDIFFERENT_PAD: GeneralPurpose = + GeneralPurpose::new(&base64::alphabet::URL_SAFE, INDIFFERENT_PAD); + + let decoded = STANDARD_INDIFFERENT_PAD .decode(s) .or_else(|e| match e { // Either standard or URL-safe base64 encoding are accepted @@ -80,7 +89,7 @@ pub mod private { // Therefore if we error out on those characters, try again with // the URL-safe character set base64::DecodeError::InvalidByte(_, c) if c == b'-' || c == b'_' => { - base64::engine::general_purpose::URL_SAFE.decode(s) + URL_SAFE_INDIFFERENT_PAD.decode(s) } _ => Err(e), })