1
1
mirror of https://github.com/wez/wezterm.git synced 2024-11-29 21:44:24 +03:00

update base64, work around another batch of breaking API changes

closes: https://github.com/wez/wezterm/pull/2931
This commit is contained in:
Wez Furlong 2023-01-08 18:49:45 -07:00
parent c9a0537b7b
commit d34297cd2c
No known key found for this signature in database
GPG Key ID: 7A7F66A31EC9B387
7 changed files with 48 additions and 33 deletions

14
Cargo.lock generated
View File

@ -294,9 +294,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]]
name = "base64"
version = "0.20.0"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5"
checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
[[package]]
name = "base91"
@ -2304,9 +2304,9 @@ dependencies = [
[[package]]
name = "ipnet"
version = "2.7.0"
version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e"
checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
[[package]]
name = "is-terminal"
@ -2906,7 +2906,7 @@ version = "0.1.0"
dependencies = [
"anyhow",
"async-trait",
"base64 0.20.0",
"base64 0.21.0",
"bintree",
"bitflags",
"chrono",
@ -4993,7 +4993,7 @@ name = "termwiz"
version = "0.19.0"
dependencies = [
"anyhow",
"base64 0.20.0",
"base64 0.21.0",
"bitflags",
"cassowary",
"criterion",
@ -6048,7 +6048,7 @@ dependencies = [
"anyhow",
"assert_fs",
"async_ossl",
"base64 0.20.0",
"base64 0.21.0",
"bitflags",
"camino",
"clap 4.0.32",

View File

@ -9,7 +9,7 @@ edition = "2018"
[dependencies]
anyhow = "1.0"
async-trait = "0.1"
base64 = "0.20"
base64 = "0.21"
bintree = { path = "../bintree" }
bitflags = "1.3"
chrono = { version = "0.4", features = ["serde"] }

View File

@ -12,7 +12,7 @@ readme = "README.md"
[dependencies]
# backtrace = "0.3"
base64 = "0.20"
base64 = "0.21"
bitflags = "1.3"
cassowary = {version="0.3", optional=true}
anyhow = "1.0"

View File

@ -1,3 +1,4 @@
use crate::escape::osc::{base64_decode, base64_encode};
use std::collections::BTreeMap;
use std::fmt::{Display, Error as FmtError, Formatter};
use std::io::{Read, Seek};
@ -112,17 +113,17 @@ impl KittyImageData {
match t {
"d" => Some(Self::Direct(String::from_utf8(payload.to_vec()).ok()?)),
"f" => Some(Self::File {
path: String::from_utf8(base64::decode(payload.to_vec()).ok()?).ok()?,
path: String::from_utf8(base64_decode(payload.to_vec()).ok()?).ok()?,
data_size: geti(keys, "S"),
data_offset: geti(keys, "O"),
}),
"t" => Some(Self::TemporaryFile {
path: String::from_utf8(base64::decode(payload.to_vec()).ok()?).ok()?,
path: String::from_utf8(base64_decode(payload.to_vec()).ok()?).ok()?,
data_size: geti(keys, "S"),
data_offset: geti(keys, "O"),
}),
"s" => Some(Self::SharedMem {
name: String::from_utf8(base64::decode(payload.to_vec()).ok()?).ok()?,
name: String::from_utf8(base64_decode(payload.to_vec()).ok()?).ok()?,
data_size: geti(keys, "S"),
data_offset: geti(keys, "O"),
}),
@ -141,7 +142,7 @@ impl KittyImageData {
data_size,
} => {
keys.insert("t", "f".to_string());
keys.insert("payload", base64::encode(&path));
keys.insert("payload", base64_encode(&path));
set(keys, "S", data_size);
set(keys, "S", data_offset);
}
@ -151,7 +152,7 @@ impl KittyImageData {
data_size,
} => {
keys.insert("t", "t".to_string());
keys.insert("payload", base64::encode(&path));
keys.insert("payload", base64_encode(&path));
set(keys, "S", data_size);
set(keys, "S", data_offset);
}
@ -161,7 +162,7 @@ impl KittyImageData {
data_size,
} => {
keys.insert("t", "s".to_string());
keys.insert("payload", base64::encode(&name));
keys.insert("payload", base64_encode(&name));
set(keys, "S", data_size);
set(keys, "S", data_offset);
}
@ -195,7 +196,7 @@ impl KittyImageData {
match self {
Self::Direct(data) => {
base64::decode(data).or_else(|_| Err(std::io::ErrorKind::InvalidInput.into()))
base64_decode(data).or_else(|_| Err(std::io::ErrorKind::InvalidInput.into()))
}
Self::File {
path,

View File

@ -1,6 +1,7 @@
use crate::color::SrgbaTuple;
pub use crate::hyperlink::Hyperlink;
use crate::{bail, ensure, Result};
use base64::Engine;
use bitflags::bitflags;
use num_derive::*;
use num_traits::FromPrimitive;
@ -168,7 +169,7 @@ impl OperatingSystemCommand {
Selection::try_parse(osc[1]).map(OperatingSystemCommand::QuerySelection)
} else if osc.len() == 3 {
let sel = Selection::try_parse(osc[1])?;
let bytes = base64::decode(osc[2])?;
let bytes = base64_decode(osc[2])?;
let s = String::from_utf8(bytes)?;
Ok(OperatingSystemCommand::SetSelection(sel, s))
} else {
@ -505,7 +506,7 @@ impl Display for OperatingSystemCommand {
}
ClearSelection(s) => write!(f, "52;{}", s)?,
QuerySelection(s) => write!(f, "52;{};?", s)?,
SetSelection(s, val) => write!(f, "52;{};{}", s, base64::encode(val))?,
SetSelection(s, val) => write!(f, "52;{};{}", s, base64_encode(val))?,
SystemNotification(s) => write!(f, "9;{}", s)?,
ITermProprietary(i) => i.fmt(f)?,
FinalTermSemanticPrompt(i) => i.fmt(f)?,
@ -907,7 +908,7 @@ impl ITermFileData {
let param = if idx == last {
// The final argument contains `:base64`, so look for that
if let Some(colon) = param.iter().position(|c| *c == b':') {
data = Some(base64::decode(&param[colon + 1..])?);
data = Some(base64_decode(&param[colon + 1..])?);
&param[..colon]
} else {
// If we don't find the colon in the last piece, we've
@ -935,7 +936,7 @@ impl ITermFileData {
let name = params
.get("name")
.and_then(|s| base64::decode(s).ok())
.and_then(|s| base64_decode(s).ok())
.and_then(|b| String::from_utf8(b).ok());
let size = params.get("size").and_then(|s| s.parse().ok());
let width = params
@ -983,7 +984,7 @@ impl Display for ITermFileData {
}
if let Some(ref name) = self.name {
sep = emit_sep(sep, f)?;
write!(f, "name={}", base64::encode(name))?;
write!(f, "name={}", base64_encode(name))?;
}
if self.width != ITermDimension::Automatic {
sep = emit_sep(sep, f)?;
@ -1010,7 +1011,7 @@ impl Display for ITermFileData {
if sep == "=" {
write!(f, "=")?;
}
write!(f, ":{}", base64::encode(&self.data))?;
write!(f, ":{}", base64_encode(&self.data))?;
Ok(())
}
}
@ -1145,13 +1146,13 @@ impl ITermProprietary {
};
if osc.len() == 3 && keyword == "Copy" && p1_empty {
return Ok(ITermProprietary::Copy(String::from_utf8(base64::decode(
return Ok(ITermProprietary::Copy(String::from_utf8(base64_decode(
osc[2],
)?)?));
}
if osc.len() == 3 && keyword == "SetBadgeFormat" && p1_empty {
return Ok(ITermProprietary::SetBadgeFormat(String::from_utf8(
base64::decode(osc[2])?,
base64_decode(osc[2])?,
)?));
}
@ -1183,7 +1184,7 @@ impl ITermProprietary {
if let (Some(k), Some(v)) = (p1, p2) {
return Ok(ITermProprietary::SetUserVar {
name: k.to_string(),
value: String::from_utf8(base64::decode(v)?)?,
value: String::from_utf8(base64_decode(v)?)?,
});
}
}
@ -1222,6 +1223,18 @@ impl ITermProprietary {
}
}
/// base64::encode is deprecated, so make a less frustrating helper
pub(crate) fn base64_encode<T: AsRef<[u8]>>(s: T) -> String {
base64::engine::general_purpose::STANDARD.encode(s)
}
/// base64::decode is deprecated, so make a less frustrating helper
pub(crate) fn base64_decode<T: AsRef<[u8]>>(
s: T,
) -> std::result::Result<Vec<u8>, base64::DecodeError> {
base64::engine::general_purpose::STANDARD.decode(s)
}
impl Display for ITermProprietary {
fn fmt(&self, f: &mut Formatter) -> FmtResult {
write!(f, "1337;")?;
@ -1251,12 +1264,12 @@ impl Display for ITermProprietary {
f,
"ReportCellSize={height_pixels:.1};{width_pixels:.1};{scale:.1}",
)?,
Copy(s) => write!(f, "Copy=;{}", base64::encode(s))?,
ReportVariable(s) => write!(f, "ReportVariable={}", base64::encode(s))?,
Copy(s) => write!(f, "Copy=;{}", base64_encode(s))?,
ReportVariable(s) => write!(f, "ReportVariable={}", base64_encode(s))?,
SetUserVar { name, value } => {
write!(f, "SetUserVar={}={}", name, base64::encode(value))?
write!(f, "SetUserVar={}={}", name, base64_encode(value))?
}
SetBadgeFormat(s) => write!(f, "SetBadgeFormat={}", base64::encode(s))?,
SetBadgeFormat(s) => write!(f, "SetBadgeFormat={}", base64_encode(s))?,
File(file) => file.fmt(f)?,
UnicodeVersion(ITermUnicodeVersionOp::Set(n)) => write!(f, "UnicodeVersion={}", n)?,
UnicodeVersion(ITermUnicodeVersionOp::Push(Some(label))) => {

View File

@ -18,7 +18,7 @@ vendored-openssl-libssh-rs = ["libssh-rs/vendored-openssl"]
[dependencies]
anyhow = "1.0"
base64 = "0.20"
base64 = "0.21"
bitflags = "1.3"
camino = "1.0"
dirs-next = "2.0"

View File

@ -115,11 +115,12 @@ impl crate::sessioninner::SessionInner {
let fingerprint = sess
.host_key_hash(ssh2::HashType::Sha256)
.map(|fingerprint| {
let engine = base64::engine::fast_portable::FastPortable::from(
use base64::Engine;
let engine = base64::engine::general_purpose::GeneralPurpose::new(
&base64::alphabet::STANDARD,
base64::engine::fast_portable::NO_PAD,
base64::engine::general_purpose::NO_PAD,
);
format!("SHA256:{}", base64::encode_engine(fingerprint, &engine))
format!("SHA256:{}", engine.encode(fingerprint))
})
.or_else(|| {
// Querying for the Sha256 can fail if for example we were linked