mehcode / config-rs

⚙️ Layered configuration system for Rust applications (with strong support for 12-factor applications).
Apache License 2.0
2.43k stars 206 forks source link

Incorrectly deserializes upper case unquoted `INF` string value from a YAML file #568

Open pamburus opened 3 weeks ago

pamburus commented 3 weeks ago

Description

Here is the minimal test set to reproduce the issue

Source Files

assets/config.yaml

val: INF

src/lib.rs

#[cfg(test)]
mod tests {
    use config::Config;
    use serde::Deserialize;

    #[test]
    fn test_yaml_inf() {
        #[derive(Deserialize)]
        struct Settings {
            pub val: String,
        }

        let cfg = Config::builder()
            .add_source(config::File::with_name("assets/config.yaml"))
            .build()
            .unwrap();
        let settings = cfg.try_deserialize::<Settings>().unwrap();

        assert_eq!(settings.val, "INF");
    }
}

Cargo.toml

[package]
name = "hl-issue-288"
version = "0.1.0"
edition = "2021"

[dependencies]
config = { version = "0", features = ["yaml"] }
serde = { version = "1", features = ["derive"] }

Expected results

Actual results

Notes