cpp_demangle icon indicating copy to clipboard operation
cpp_demangle copied to clipboard

Remove `impl Display for Symbol`

Open Ninja3047 opened this issue 3 years ago • 1 comments

When I run the following program, to_string seems to panic, while the unwrap succeeds. I'm not sure if this is intentional or not.

use cpp_demangle::Symbol;

fn main() {
    let n = Symbol::new("RC4").unwrap();
    let b = n.to_string();
}

Upon further inspection, the fmt function from the Display trait throws the following error when compiled with logging which causes the to_string implementation to panic.

Error getting leaf name: reference to a leaf name in a context where there is no current leaf name

When demangling it without using to_string, demangle correctly returns the Error

use cpp_demangle::Symbol;

fn main() {
    let n = Symbol::new("RC4").unwrap();
    let options = DemangleOptions::default();
    if let Err(e) = n.demangle(&options) {
        println!("{}", e);
    }
}

And prints the following:

an error occurred when formatting an argument

Ninja3047 avatar Jan 03 '22 04:01 Ninja3047

Yeah, this is because Symbol's Display implementation can return an error for internal reasons (which is technically a violation of Display's contract). The solution to this is to remove the Display impl entirely and instead rely on Symbol::demangle, but that requires a major version bump.

khuey avatar Jan 03 '22 13:01 khuey