Update plist to v1.8.0 and quick-xml to v0.38.4

In Metal Gear Solid Touch (v1.0.0), the plist crate caused a crash when
English was used, due to an InvalidTrailerObjectOffsetSize error when
reading the en.lproj/Localizable.strings file. It was worked around
by setting Japanese as the default language, since
ja.lproj/Localizable.strings loaded successfully.

The latest version of plist fixes this issue, and thus the workaround
is no longer required.

quick-xml, being both a direct dependency as well as transitive
dependency through plist, was also updated to avoid requiring two
versions of the same crate.

The commit updates the versions in Cargo.toml, removes the Japanese
language default setting, and replaces calls to the unescape method
in quick-xml with its replacement method decode.

Fixes GitHub issue #430.

Change-Id: I9b3dae3e994acc1df8016af69a4d2c250cf3f6ef
This commit is contained in:
RMZeroFour
2025-11-28 02:09:14 +05:30
parent 9c9c139708
commit b71b6d78b3
4 changed files with 103 additions and 52 deletions

140
Cargo.lock generated
View File

@@ -54,9 +54,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "base64"
version = "0.13.1"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bitflags"
@@ -174,7 +174,7 @@ dependencies = [
"bitflags",
"clap_derive",
"clap_lex",
"indexmap",
"indexmap 1.9.2",
"once_cell",
"strsim",
"termcolor",
@@ -191,7 +191,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"syn",
"syn 1.0.105",
]
[[package]]
@@ -252,6 +252,15 @@ dependencies = [
"memchr",
]
[[package]]
name = "deranged"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
dependencies = [
"powerfmt",
]
[[package]]
name = "encoding_rs"
version = "0.8.35"
@@ -261,6 +270,12 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "equivalent"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "flate2"
version = "1.0.25"
@@ -297,6 +312,12 @@ version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
[[package]]
name = "heck"
version = "0.4.1"
@@ -325,7 +346,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
dependencies = [
"autocfg",
"hashbrown",
"hashbrown 0.12.3",
]
[[package]]
name = "indexmap"
version = "2.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2"
dependencies = [
"equivalent",
"hashbrown 0.16.1",
]
[[package]]
@@ -358,15 +389,6 @@ version = "0.2.137"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
[[package]]
name = "line-wrap"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
dependencies = [
"safemem",
]
[[package]]
name = "log"
version = "0.4.17"
@@ -413,6 +435,12 @@ dependencies = [
"adler",
]
[[package]]
name = "num-conv"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
[[package]]
name = "once_cell"
version = "1.17.0"
@@ -436,18 +464,23 @@ dependencies = [
[[package]]
name = "plist"
version = "1.3.1"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225"
checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07"
dependencies = [
"base64",
"indexmap",
"line-wrap",
"indexmap 2.12.1",
"quick-xml",
"serde",
"time",
"xml-rs",
]
[[package]]
name = "powerfmt"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
name = "proc-macro-error"
version = "1.0.4"
@@ -457,7 +490,7 @@ dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
"syn",
"syn 1.0.105",
"version_check",
]
@@ -474,27 +507,27 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.47"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quick-xml"
version = "0.36.2"
version = "0.38.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe"
checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c"
dependencies = [
"memchr",
]
[[package]]
name = "quote"
version = "1.0.21"
version = "1.0.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
dependencies = [
"proc-macro2",
]
@@ -521,12 +554,6 @@ version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
[[package]]
name = "safemem"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
[[package]]
name = "sdl2"
version = "0.37.0"
@@ -560,22 +587,32 @@ dependencies = [
[[package]]
name = "serde"
version = "1.0.148"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e53f64bb4ba0191d6d0676e1b141ca55047d83b74f5607e6d8eb88126c52c2dc"
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
dependencies = [
"serde_core",
"serde_derive",
]
[[package]]
name = "serde_core"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.148"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a55492425aa53521babf6137309e7d34c20bbfbbfcfe2c7f3a047fd1f6b92c0c"
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 2.0.111",
]
[[package]]
@@ -726,6 +763,17 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.111"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "termcolor"
version = "1.2.0"
@@ -758,16 +806,19 @@ checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.105",
]
[[package]]
name = "time"
version = "0.3.17"
version = "0.3.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
dependencies = [
"deranged",
"itoa 1.0.4",
"num-conv",
"powerfmt",
"serde",
"time-core",
"time-macros",
@@ -775,16 +826,17 @@ dependencies = [
[[package]]
name = "time-core"
version = "0.1.0"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
[[package]]
name = "time-macros"
version = "0.2.6"
version = "0.2.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
dependencies = [
"num-conv",
"time-core",
]

View File

@@ -41,7 +41,7 @@ gl_generator = "0.14.0"
caf = "0.1.0"
hound = "3.5.0"
mach_object = "0.1.17"
plist = "1.3.1"
plist = "1.8.0"
zip = { version = "0.6.4", default-features = false, features = ["deflate"] }
rusttype = "0.9.3"
# While most Symphonia codecs are (likely) unpatented/have freely licenseable
@@ -50,7 +50,7 @@ rusttype = "0.9.3"
# be ok.
# (The above statements should not understood as legal claims/advice.)
symphonia = { version = "0.5.3", default-features = false, features = ["adpcm", "wav", "aac", "isomp4", "mp3", "alac"] }
quick-xml = "0.36.2"
quick-xml = "0.38.4"
md5 = "0.7.0"
yore = "1.1.0"
encoding_rs = "0.8.35"

View File

@@ -149,7 +149,7 @@ pub const CLASSES: ClassExports = objc_classes! {
}
}
Event::Text(e) => {
let text = e.unescape().unwrap().into_owned();
let text = e.decode().unwrap().to_string();
// FIXME: skipping the end of the parsed string?
if text != "\0" {
let sel: SEL = env
@@ -214,7 +214,7 @@ pub const CLASSES: ClassExports = objc_classes! {
.register_host_selector("parser:foundCharacters:".to_string(), &mut env.mem);
let responds: bool = msg![env; delegate respondsToSelector:sel];
if responds {
let text = e.escape().unwrap().unescape().unwrap().to_string();
let text = e.escape().unwrap().decode().unwrap().to_string();
let text = from_rust_string(env, text);
let text = autorelease(env, text);
() = msg![env; delegate parser:this foundCharacters:text];
@@ -222,7 +222,7 @@ pub const CLASSES: ClassExports = objc_classes! {
}
}
Event::Comment(e) => {
let comment = e.unescape().unwrap().into_owned();
let comment = e.decode().unwrap().to_string();
let sel: SEL = env
.objc
.register_host_selector("parser:foundComment:".to_string(), &mut env.mem);

View File

@@ -145,9 +145,8 @@ com.gameloft.Asphalt5: --landscape-left --button-to-touch=A,415,295 --button-to-
com.gameloft.SkateNation: --landscape-left --button-to-touch=DPadLeft,45,237 --button-to-touch=DPadRight,132,237 --button-to-touch=DPadUp,90,190 --button-to-touch=DPadDown,90,280 --button-to-touch=A,435,275 --button-to-touch=B,350,240 --button-to-touch=Start,450,25 --button-to-touch=LeftShoulder,25,300
# Metal Gear Solid Touch
# (we need to force Japanese language)
com.konami.mgst: --preferred-languages=ja --landscape-left
com.konami-europe.mgst: --preferred-languages=ja --landscape-left
com.konami.mgst: --landscape-left
com.konami-europe.mgst: --landscape-left
# Dark Nebula
com.1337gamedesign.DarkNebula: --x-tilt-offset=-14