Merge pull request #1304 from hannobraun/version

Fix panic on Windows when loading model version
This commit is contained in:
Hanno Braun 2022-11-03 10:46:30 +01:00 committed by GitHub
commit eae922bdde
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 25 deletions

View File

@ -108,15 +108,13 @@ impl Model {
let version_pkg: libloading::Symbol<fn() -> RawVersion> =
lib.get(b"version_pkg").map_err(Error::LoadingVersion)?;
let version_pkg = version_pkg();
if fj::version::VERSION_PKG != version_pkg.as_str() {
let version_pkg = version_pkg().to_string();
if fj::version::VERSION_PKG != version_pkg {
let host = String::from_utf8_lossy(
fj::version::VERSION_PKG.as_bytes(),
)
.into_owned();
let model =
String::from_utf8_lossy(version_pkg.as_str().as_bytes())
.into_owned();
let model = version_pkg;
return Err(Error::VersionMismatch { host, model });
}
@ -124,15 +122,13 @@ impl Model {
let version_full: libloading::Symbol<fn() -> RawVersion> =
lib.get(b"version_full").map_err(Error::LoadingVersion)?;
let version_full = version_full();
if fj::version::VERSION_FULL != version_full.as_str() {
let version_full = version_full().to_string();
if fj::version::VERSION_FULL != version_full {
let host = String::from_utf8_lossy(
fj::version::VERSION_FULL.as_bytes(),
)
.into_owned();
let model =
String::from_utf8_lossy(version_full.as_str().as_bytes())
.into_owned();
let model = version_full;
warn!("{}", Error::VersionMismatch { host, model });
}

View File

@ -102,19 +102,7 @@ pub fn run(
}
ModelEvent::Error(err) => {
// Can be cleaned up, once `Report` is stable:
// https://doc.rust-lang.org/std/error/struct.Report.html
println!("Error receiving updated shape: {}", err);
let mut current_err = &err as &dyn error::Error;
while let Some(err) = current_err.source() {
println!();
println!("Caused by:");
println!(" {}", err);
current_err = err;
}
status.update_status(&err.to_string());
}
}
}

View File

@ -39,9 +39,10 @@ impl RawVersion {
///
/// Must be a `RawVersion` returned from one of the hidden version functions
/// in this module.
pub unsafe fn as_str(&self) -> &str {
#[allow(clippy::inherent_to_string)]
pub unsafe fn to_string(&self) -> String {
let slice = slice::from_raw_parts(self.ptr, self.len);
std::str::from_utf8(slice).unwrap()
String::from_utf8_lossy(slice).into_owned()
}
}