时序中的 rust 分段故障

wpcxdonn  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(127)

在使用LinuxPAM并使用一些与日期相关的逻辑在Rust中开发示例库时,我在使用pamtester测试authenticate()函数时遇到了一个分段错误。
Cargo.toml

...
[dependencies]
chrono = { version = "0.4.*", features = ["serde"] }
...
dluptydi

dluptydi1#

经过大量调试后,我将分段错误的来源定位到一个确定当前日期的变量:

use ::chrono::{NaiveDateTime, Local};

pub fn get_today() -> Result<NaiveDateTime, Error> {
    // this is the perpetrator
    let local_now: NaiveDateTime = Local::now().naive_local();
    if let Some(local_date) = local_now.date().and_hms_opt(0, 0, 0) {
        return Ok(local_date);
    }
    else {
        Err(Error::new("Cannot get today's date!"))
    }
}

在查找chrono中导致分段错误的问题时,发现chrono仍然依赖于time 0.1,在某些特殊情况下会导致分段错误;以及updating chrono to a more recent version of time is a bit difficult
有一个Rust advisory建议了一个解决方案:要禁用默认功能并仅启用特定功能:Cargo.toml

...
[dependencies]
chrono = { version = "0.4.*", default-features = false, features = ["serde", "clock"] }
...

使用此修复后,pamtester中不再出现分段错误。

  • (还没有发现任何关于它的SO,所以分享给别人不要花几个晚上撕裂他们的头发:-))*

相关问题