Skip to content

New panic with env_logger and with #[windows_subsystem = "windows"] #88576

@parasyte

Description

@parasyte

This was initially reported in rust-cli/env_logger#214, but I'm adding it here for additional eyes and because this issue doesn't occur on stable Rust. I could be wrong but this looks like this is caused by #87329 ... cc @sunfishcode ?


I spent an hour trying to reduce a minimal test case for this error I started experiencing with my app. So far I have produced the following:

[package] name = "windows_explodey" version = "0.1.0" edition = "2018" resolver = "2" [dependencies] env_logger = "0.9" [profile.release] panic = "abort"
#![windows_subsystem = "windows"] fn main() { env_logger::init(); println!("Hello, world!"); }

When running this on any nightly compiler since nightly-2021-08-21, I get an error like this:

$ cargo +nightly-2021-08-21 run Finished dev [unoptimized + debuginfo] target(s) in 0.03s Running `target\debug\windows_explodey.exe` error: process didn't exit successfully: `target\debug\windows_explodey.exe` (exit code: 101) 

Adjusting the profile to panic = "abort" causes an even more ominous error:

$ cargo +nightly-2021-08-21 run --release Finished release [optimized] target(s) in 0.03s Running `target\release\windows_explodey.exe` error: process didn't exit successfully: `target\release\windows_explodey.exe` (exit code: 0xc0000409, STATUS_STACK_BUFFER_OVERRUN) 

Here's a stack trace from windbg:

[0x0] windows_explodey!panic_abort::__rust_start_panic::abort + 0x5 [0x1] windows_explodey!panic_abort::__rust_start_panic + 0x6 [0x2] windows_explodey!std::panicking::rust_panic + 0x1b [0x3] windows_explodey!std::panicking::rust_panic_with_hook + 0x297 [0x4] windows_explodey!std::panicking::begin_panic_handler::closure$0 + 0x6f [0x5] windows_explodey!std::sys_common::backtrace::__rust_end_short_backtrace<std::panicking::begin_panic_handler::closure$0,never$> + 0x17 [0x6] windows_explodey!std::panicking::begin_panic_handler + 0x49 [0x7] windows_explodey!core::panicking::panic_fmt + 0x30 [0x8] windows_explodey!core::panicking::panic + 0x4c [0x9] windows_explodey!std::os::imp::windows::io::handle::impl$11::from_raw_handle + 0x4c [0xa] windows_explodey!std::os::imp::windows::io::raw::impl$7::from_raw_handle + 0x13 [0xb] windows_explodey!winapi_util::win::HandleRef::from_raw_handle + 0xe [0xc] windows_explodey!winapi_util::win::HandleRef::stderr + 0x27 [0xd] windows_explodey!winapi_util::console::HandleKind::handle + 0x27 [0xe] windows_explodey!winapi_util::console::Console::create_for_stream + 0x22 [0xf] windows_explodey!winapi_util::console::Console::stderr + 0x1d [0x10] windows_explodey!termcolor::BufferWriter::create + 0x59 [0x11] windows_explodey!termcolor::BufferWriter::stderr + 0x22 [0x12] windows_explodey!env_logger::fmt::writer::termcolor::imp::BufferWriter::stderr + 0x49 [0x13] windows_explodey!env_logger::fmt::writer::Builder::build + 0x133 [0x14] windows_explodey!env_logger::Builder::build + 0x46 [0x15] windows_explodey!env_logger::Builder::try_init + 0x1c [0x16] windows_explodey!env_logger::try_init_from_env<env_logger::Env> + 0x39 [0x17] windows_explodey!env_logger::try_init + 0x1b [0x18] windows_explodey!env_logger::init + 0x9 [0x19] windows_explodey!windows_explodey::main + 0x9 

If I'm reading this correctly, the panic is from this assertion:

assert!(!handle.is_null());

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.P-highHigh priorityT-libsRelevant to the library team, which will review and decide on the PR/issue.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions