From dfabc07044c819cb30615b8fe1d944dc6aa79485 Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Wed, 9 Oct 2019 17:15:34 -0700 Subject: [PATCH] More consistent handling of non-Unicode file names (should be rare) --- src/snapshot_middleware/json_model.rs | 12 ++++++++++-- src/snapshot_middleware/rbxlx.rs | 15 ++++++++++++--- src/snapshot_middleware/rbxm.rs | 15 ++++++++++++--- src/snapshot_middleware/rbxmx.rs | 15 ++++++++++++--- 4 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/snapshot_middleware/json_model.rs b/src/snapshot_middleware/json_model.rs index 5b8834b4..65f90d77 100644 --- a/src/snapshot_middleware/json_model.rs +++ b/src/snapshot_middleware/json_model.rs @@ -9,7 +9,10 @@ use crate::{ snapshot::InstanceSnapshot, }; -use super::middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}; +use super::{ + error::SnapshotError, + middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, +}; pub struct SnapshotJsonModel; @@ -22,7 +25,12 @@ impl SnapshotMiddleware for SnapshotJsonModel { return Ok(None); } - let file_name = entry.path().file_name().unwrap().to_string_lossy(); + let file_name = entry + .path() + .file_name() + .unwrap() + .to_str() + .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))?; let instance_name = match match_trailing(&file_name, ".model.json") { Some(name) => name.to_owned(), diff --git a/src/snapshot_middleware/rbxlx.rs b/src/snapshot_middleware/rbxlx.rs index 334b7d68..663a4aeb 100644 --- a/src/snapshot_middleware/rbxlx.rs +++ b/src/snapshot_middleware/rbxlx.rs @@ -7,7 +7,10 @@ use crate::{ snapshot::InstanceSnapshot, }; -use super::middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}; +use super::{ + error::SnapshotError, + middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, +}; pub struct SnapshotRbxlx; @@ -20,7 +23,12 @@ impl SnapshotMiddleware for SnapshotRbxlx { return Ok(None); } - let file_name = entry.path().file_name().unwrap().to_string_lossy(); + let file_name = entry + .path() + .file_name() + .unwrap() + .to_str() + .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))?; if !file_name.ends_with(".rbxlx") { return Ok(None); @@ -30,7 +38,8 @@ impl SnapshotMiddleware for SnapshotRbxlx { .path() .file_stem() .expect("Could not extract file stem") - .to_string_lossy() + .to_str() + .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))? .to_string(); let options = rbx_xml::DecodeOptions::new() diff --git a/src/snapshot_middleware/rbxm.rs b/src/snapshot_middleware/rbxm.rs index f97ed19f..d98230ae 100644 --- a/src/snapshot_middleware/rbxm.rs +++ b/src/snapshot_middleware/rbxm.rs @@ -7,7 +7,10 @@ use crate::{ snapshot::InstanceSnapshot, }; -use super::middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}; +use super::{ + error::SnapshotError, + middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, +}; pub struct SnapshotRbxm; @@ -20,7 +23,12 @@ impl SnapshotMiddleware for SnapshotRbxm { return Ok(None); } - let file_name = entry.path().file_name().unwrap().to_string_lossy(); + let file_name = entry + .path() + .file_name() + .unwrap() + .to_str() + .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))?; if !file_name.ends_with(".rbxm") { return Ok(None); @@ -30,7 +38,8 @@ impl SnapshotMiddleware for SnapshotRbxm { .path() .file_stem() .expect("Could not extract file stem") - .to_string_lossy() + .to_str() + .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))? .to_string(); let mut temp_tree = RbxTree::new(RbxInstanceProperties { diff --git a/src/snapshot_middleware/rbxmx.rs b/src/snapshot_middleware/rbxmx.rs index 51ef1ed4..e08354aa 100644 --- a/src/snapshot_middleware/rbxmx.rs +++ b/src/snapshot_middleware/rbxmx.rs @@ -7,7 +7,10 @@ use crate::{ snapshot::InstanceSnapshot, }; -use super::middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}; +use super::{ + error::SnapshotError, + middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, +}; pub struct SnapshotRbxmx; @@ -20,7 +23,12 @@ impl SnapshotMiddleware for SnapshotRbxmx { return Ok(None); } - let file_name = entry.path().file_name().unwrap().to_string_lossy(); + let file_name = entry + .path() + .file_name() + .unwrap() + .to_str() + .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))?; if !file_name.ends_with(".rbxmx") { return Ok(None); @@ -30,7 +38,8 @@ impl SnapshotMiddleware for SnapshotRbxmx { .path() .file_stem() .expect("Could not extract file stem") - .to_string_lossy() + .to_str() + .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))? .to_string(); let options = rbx_xml::DecodeOptions::new()