Skip to content

Commit

Permalink
Bug 1773399 - Update plist to 1.3.1. r=emilio
Browse files Browse the repository at this point in the history
  • Loading branch information
glandium committed Jun 9, 2022
1 parent 0b41934 commit ba89454
Show file tree
Hide file tree
Showing 13 changed files with 666 additions and 110 deletions.
6 changes: 3 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion supply-chain/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -1114,7 +1114,7 @@ version = "0.17.1"
criteria = "safe-to-deploy"

[[unaudited.plist]]
version = "1.2.1"
version = "1.3.1"
criteria = "safe-to-run"

[[unaudited.ppv-lite86]]
Expand Down
2 changes: 1 addition & 1 deletion third_party/rust/plist/.cargo-checksum.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"files":{"Cargo.toml":"bde02d9bcdc1cc5ef099fb2afa21345f170b2646afd18cbbf9a3bfab563a6bf9","LICENCE":"5b0ae40d1a35f7ae6591a28e44771240e6a88cb03a66c9189a45b9681639b466","README.md":"25091b2b53ea578f6fc369259070938eaeea06a0b7ba7a81b50da503198345ed","rustfmt.toml":"9bbb759b3914c49c8060bcdeeb7786f4aec083d30bcfe236bbd48d8388d06103","src/date.rs":"c14f616d03708b44b53c4e7037129f31e07e9f45dc63e282bdd2d744a52c3b95","src/de.rs":"12de6721323a6bc47238388e23c345664ca9efd8a106c9705e1c0510b62bd963","src/dictionary.rs":"96815436417473ab0b1c4909f3c46ec14274cc20ec10945c8e19ee1fcf773156","src/error.rs":"cd4d6e85e003995d9ecdf8acb43f6c2379f1c910c5c3d78835c28ae32556b3d2","src/integer.rs":"131f528878adc5c0f33c8ad1563c06b397cb2ae5148c2bb9318203a2477d70e0","src/lib.rs":"893b8c3e019c772edc116c907069eeb55874f245fb26d71b95d6f25c938e00f6","src/ser.rs":"960ee6ecc00a2b0478b1e2f5e65fd192af9474af9921c1b871659707ac4a33a5","src/serde_tests.rs":"bfb0a2376f8c2a8b12169742f2c52537bb5e9caf1bf285b373e9c9f096f8a0bf","src/stream/binary_reader.rs":"c2506a3f62dbaf23e8238969222d1582f04cf74d333cc94d766a74f717d5eab8","src/stream/binary_writer.rs":"1b10bbf287ad48be3a82c36cebbc32f7232fff42995142e09f98d2a2eb1fb628","src/stream/mod.rs":"b9210324a764bd0a9f5a5a0e22981024856fba1478f81594a123db59d16b7108","src/stream/xml_reader.rs":"5461e9601ad4e4a2853bab6ffb24062f9053f89a33cbcb91eca9566b20183354","src/stream/xml_writer.rs":"b39b4d67c62233b2761573b5c1256448c4af21d3deca4391b0e7d15cc015dac8","src/uid.rs":"adb51121ee251941f173d83417631cd2fdfbc7104998205c538d93e4b3c3e676","src/value.rs":"88fc4a74f7fe9d2424479d4c43740c0f1499b8f3fae40261f489d3e934c265f3","tests/data/binary.plist":"728985bb53486a92fdcc901a3c08a904835f0225efab7b85be2734e2dcd4af83","tests/data/binary_NSKeyedArchiver.plist":"54dc8b87acd364de6b2160ff805514bc04bf0577e4f57d08d7f3578d218362f0","tests/data/binary_circular_array.plist":"825aed6ce83a8abdbe15d4686ce35157f4eb861bd792f0ce790115fb4ec48805","tests/data/binary_zero_offset_size.plist":"020953c8211989d01b5edf42e025560f46ece3b604ceda03708819bd2587a1a1","tests/data/book.plist":"3b18050f073cab956f38f1775e89dedc88d1e56dd388bc99e277efb19e50dffd","tests/data/utf16_bplist.plist":"c0b7d33001021df98d8631c604c8471e74e4b4599bac51a8bed149ca82adbcd5","tests/data/xml.plist":"9669e8ad25a661ca052d30d8d74b7495e859a0a7faf01f2aeade7fcebb2aa5b7","tests/data/xml_error.plist":"3718f7dd2c716a4a6c36d1f7055b78d86c982c812c19964f85a6f62eff1589ea","tests/fuzzer.rs":"ea9e7812c936e4c1e42ce234513fa8c839277222c0746c069d62e7b77870b858"},"package":"a38d026d73eeaf2ade76309d0c65db5a35ecf649e3cec428db316243ea9d6711"}
{"files":{"Cargo.toml":"2bd39244fcce5c34bc384f3ffc5100c8f50c46d4f8d32322998a7ed0d0ed1f47","LICENCE":"5b0ae40d1a35f7ae6591a28e44771240e6a88cb03a66c9189a45b9681639b466","README.md":"25091b2b53ea578f6fc369259070938eaeea06a0b7ba7a81b50da503198345ed","rustfmt.toml":"9bbb759b3914c49c8060bcdeeb7786f4aec083d30bcfe236bbd48d8388d06103","src/date.rs":"6bb495efde6e4d02dc0886f5489b83cfb2dfe4dbd2d491572a871d75ae185caa","src/de.rs":"6c68d93d533661f48e7a5e3ded576e64889a9df121ab7afadd7604b6585fb0dd","src/dictionary.rs":"cb4cde524eb4bcdcee5703429a6ce64234afce17cd0d37d0ff61c6224e8c928e","src/error.rs":"0d8975a4db0acfd4a2c636560780b3d6d7d8a008beaf0982a18de5e5c793ff36","src/integer.rs":"131f528878adc5c0f33c8ad1563c06b397cb2ae5148c2bb9318203a2477d70e0","src/lib.rs":"893b8c3e019c772edc116c907069eeb55874f245fb26d71b95d6f25c938e00f6","src/ser.rs":"960ee6ecc00a2b0478b1e2f5e65fd192af9474af9921c1b871659707ac4a33a5","src/serde_tests.rs":"905a97806256e005b8fe10bca57e371475e98c029ecb46cb6eda3879855edaa0","src/stream/binary_reader.rs":"c2506a3f62dbaf23e8238969222d1582f04cf74d333cc94d766a74f717d5eab8","src/stream/binary_writer.rs":"1b10bbf287ad48be3a82c36cebbc32f7232fff42995142e09f98d2a2eb1fb628","src/stream/mod.rs":"1442640f5f4d2ae1c3d7319bc96d99765c72906c463c093430f44cdd7a56c5e1","src/stream/xml_reader.rs":"5461e9601ad4e4a2853bab6ffb24062f9053f89a33cbcb91eca9566b20183354","src/stream/xml_writer.rs":"b39b4d67c62233b2761573b5c1256448c4af21d3deca4391b0e7d15cc015dac8","src/uid.rs":"3c9770e8e17767f8cf2dab886839f620b70054f418d3b02c9729f33c96f14925","src/value.rs":"44e23dfd9efb998e339556428de1dbba0b77bf2e59ba1d157df17520d8e11acb","tests/data/binary.plist":"728985bb53486a92fdcc901a3c08a904835f0225efab7b85be2734e2dcd4af83","tests/data/binary_NSKeyedArchiver.plist":"54dc8b87acd364de6b2160ff805514bc04bf0577e4f57d08d7f3578d218362f0","tests/data/binary_circular_array.plist":"825aed6ce83a8abdbe15d4686ce35157f4eb861bd792f0ce790115fb4ec48805","tests/data/binary_zero_offset_size.plist":"020953c8211989d01b5edf42e025560f46ece3b604ceda03708819bd2587a1a1","tests/data/book.plist":"3b18050f073cab956f38f1775e89dedc88d1e56dd388bc99e277efb19e50dffd","tests/data/utf16_bplist.plist":"c0b7d33001021df98d8631c604c8471e74e4b4599bac51a8bed149ca82adbcd5","tests/data/xml.plist":"9669e8ad25a661ca052d30d8d74b7495e859a0a7faf01f2aeade7fcebb2aa5b7","tests/data/xml_error.plist":"3718f7dd2c716a4a6c36d1f7055b78d86c982c812c19964f85a6f62eff1589ea","tests/fuzzer.rs":"01222f75eedb0b09ffbc4970a0f5598103d71447612aed791dc7f922ee87ad67"},"package":"bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225"}
27 changes: 14 additions & 13 deletions third_party/rust/plist/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,26 @@
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
# to registry (e.g., crates.io) dependencies
# to registry (e.g., crates.io) dependencies.
#
# If you believe there's an error in this file please file an
# issue against the rust-lang/cargo repository. If you're
# editing this file be aware that the upstream Cargo.toml
# will likely look very different (and much more reasonable)
# If you are reading this file be aware that the original Cargo.toml
# will likely look very different (and much more reasonable).
# See Cargo.toml.orig for the original contents.

[package]
edition = "2018"
name = "plist"
version = "1.2.1"
version = "1.3.1"
authors = ["Ed Barnard <[email protected]>"]
description = "A rusty plist parser. Supports Serde serialization."
documentation = "https://docs.rs/plist/1.2.1/plist/"
documentation = "https://docs.rs/plist/1.3.1/plist/"
keywords = ["plist", "parser"]
categories = ["config", "encoding", "parser-implementations"]
license = "MIT"
repository = "https://github.com/ebarnard/rust-plist/"
[dependencies.base64]
version = "0.13.0"

[dependencies.chrono]
version = "0.4.11"
features = ["std"]
default-features = false

[dependencies.indexmap]
version = "1.0.2"

Expand All @@ -39,12 +33,19 @@ version = "0.1.1"
version = "1.0.2"
optional = true

[dependencies.time]
version = "0.3.3"
features = ["parsing", "formatting"]

[dependencies.xml_rs]
version = "0.8.0"
version = "0.8.2"
package = "xml-rs"
[dev-dependencies.serde_derive]
version = "1.0.2"

[dev-dependencies.serde_yaml]
version = "0.8.21"

[features]
default = ["serde"]
enable_unstable_features_that_may_break_with_minor_version_bumps = []
25 changes: 18 additions & 7 deletions third_party/rust/plist/src/date.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use chrono::{DateTime, FixedOffset, SecondsFormat, Utc};
use std::{
fmt,
time::{Duration, SystemTime, UNIX_EPOCH},
};
use time::{format_description::well_known::Rfc3339, OffsetDateTime, UtcOffset};

/// A UTC timestamp used for serialization to and from the plist date type.
///
Expand All @@ -20,15 +20,17 @@ impl Date {
const PLIST_EPOCH_UNIX_TIMESTAMP: Duration = Duration::from_secs(978_307_200);

pub(crate) fn from_rfc3339(date: &str) -> Result<Self, ()> {
let offset: DateTime<FixedOffset> = DateTime::parse_from_rfc3339(date).map_err(|_| ())?;
let offset: OffsetDateTime = OffsetDateTime::parse(date, &Rfc3339)
.map_err(|_| ())?
.to_offset(UtcOffset::UTC);
Ok(Date {
inner: offset.with_timezone(&Utc).into(),
inner: offset.into(),
})
}

pub(crate) fn to_rfc3339(&self) -> String {
let datetime: DateTime<Utc> = self.inner.into();
datetime.to_rfc3339_opts(SecondsFormat::Secs, true)
let datetime: OffsetDateTime = self.inner.into();
datetime.format(&Rfc3339).unwrap()
}

pub(crate) fn from_seconds_since_plist_epoch(
Expand All @@ -49,11 +51,13 @@ impl Date {
let dur_since_plist_epoch = Duration::new(seconds, subsec_nanos);

let inner = if is_negative {
plist_epoch - dur_since_plist_epoch
plist_epoch.checked_sub(dur_since_plist_epoch)
} else {
plist_epoch + dur_since_plist_epoch
plist_epoch.checked_add(dur_since_plist_epoch)
};

let inner = inner.ok_or(InfiniteOrNanDate)?;

Ok(Date { inner })
}

Expand Down Expand Up @@ -121,6 +125,13 @@ pub mod serde_impls {
formatter.write_str("a plist date newtype")
}

fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
where
E: Error,
{
DateStrVisitor.visit_str(v)
}

fn visit_newtype_struct<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
where
D: Deserializer<'de>,
Expand Down
46 changes: 39 additions & 7 deletions third_party/rust/plist/src/de.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
use serde::de;
use serde::de::{
self,
value::{MapAccessDeserializer, MapDeserializer},
IntoDeserializer,
};
use std::{
array::IntoIter,
fmt::Display,
fs::File,
io::{BufReader, Cursor, Read, Seek},
Expand All @@ -9,9 +14,12 @@ use std::{
};

use crate::{
date::serde_impls::DATE_NEWTYPE_STRUCT_NAME,
error::{self, Error, ErrorKind, EventKind},
stream::{self, Event, OwnedEvent},
u64_to_usize,
uid::serde_impls::UID_NEWTYPE_STRUCT_NAME,
value::serde_impls::VALUE_NEWTYPE_STRUCT_NAME,
};

macro_rules! expect {
Expand Down Expand Up @@ -57,6 +65,7 @@ where
{
events: Peekable<<I as IntoIterator>::IntoIter>,
option_mode: OptionMode,
in_plist_value: bool,
}

impl<I> Deserializer<I>
Expand All @@ -67,6 +76,7 @@ where
Deserializer {
events: iter.into_iter().peekable(),
option_mode: OptionMode::Root,
in_plist_value: false,
}
}

Expand All @@ -80,6 +90,16 @@ where
self.option_mode = prev_option_mode;
ret
}

fn enter_plist_value<T, F: FnOnce(&mut Deserializer<I>) -> Result<T, Error>>(
&mut self,
f: F,
) -> Result<T, Error> {
let prev = mem::replace(&mut self.in_plist_value, true);
let ret = f(&mut *self);
self.in_plist_value = prev;
ret
}
}

impl<'de, 'a, I> de::Deserializer<'de> for &'a mut Deserializer<I>
Expand Down Expand Up @@ -112,6 +132,11 @@ where

Event::Boolean(v) => visitor.visit_bool(v),
Event::Data(v) => visitor.visit_byte_buf(v.into_owned()),
Event::Date(v) if self.in_plist_value => {
visitor.visit_enum(MapAccessDeserializer::new(MapDeserializer::new(
IntoIter::new([(DATE_NEWTYPE_STRUCT_NAME, v.to_rfc3339())]),
)))
}
Event::Date(v) => visitor.visit_string(v.to_rfc3339()),
Event::Integer(v) => {
if let Some(v) = v.as_unsigned() {
Expand All @@ -124,9 +149,10 @@ where
}
Event::Real(v) => visitor.visit_f64(v),
Event::String(v) => visitor.visit_string(v.into_owned()),
Event::Uid(v) if self.in_plist_value => visitor.visit_enum(MapAccessDeserializer::new(
MapDeserializer::new(IntoIter::new([(UID_NEWTYPE_STRUCT_NAME, v.get())])),
)),
Event::Uid(v) => visitor.visit_u64(v.get()),

Event::__Nonexhaustive => unreachable!(),
}
}

Expand Down Expand Up @@ -181,13 +207,17 @@ where

fn deserialize_newtype_struct<V>(
self,
_name: &'static str,
name: &'static str,
visitor: V,
) -> Result<V::Value, Error>
where
V: de::Visitor<'de>,
{
visitor.visit_newtype_struct(self)
if name == VALUE_NEWTYPE_STRUCT_NAME {
self.enter_plist_value(|this| visitor.visit_newtype_struct(this))
} else {
visitor.visit_newtype_struct(self)
}
}

fn deserialize_struct<V>(
Expand Down Expand Up @@ -216,7 +246,9 @@ where
{
// `plist` since v1.1 serialises unit enum variants as plain strings.
if let Some(Ok(Event::String(s))) = self.events.peek() {
return de::IntoDeserializer::into_deserializer(s.as_ref())
return s
.as_ref()
.into_deserializer()
.deserialize_enum(name, variants, visitor);
}

Expand Down Expand Up @@ -249,7 +281,7 @@ where
type Error = Error;

fn unit_variant(self) -> Result<(), Error> {
de::Deserialize::deserialize(self)
<() as de::Deserialize>::deserialize(self)
}

fn newtype_variant_seed<T>(self, seed: T) -> Result<T::Value, Error>
Expand Down
Loading

0 comments on commit ba89454

Please sign in to comment.